Fix JSON feed differences: slugs, PDFs, DOI cache
- Normalize slugs to match Jekyll behavior (dots → dashes)
so geotessera-python-0.7 becomes geotessera-python-0-7
- Add filesystem PDF check to JSON feed attachments
matching arod_papers.ml behavior for static/papers/*.pdf
- Add DOI cache infrastructure for external references:
- New bushel_doi_entry.ml module for parsing data/doi.yml
- Load DOI entries in bushel_loader.ml
- Complete note_references with external DOI URL scanning
- Scan for doi.org URLs and publisher URLs (Elsevier, IEEE, etc.)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>