Implement Phase 7.6.1: Per-page /Annots walker + subtype dispatch.
Creates the annotation module with:
- AnnotationCommon struct with shared fields (subtype, rect, contents,
author, modified date, color, opacity, flags, name_id, subject)
- dispatch_annotations() function that walks /Annots arrays and
dispatches by /Subtype:
- /Link → link extractor (7.6.2 placeholder)
- /Widget → skipped (handled by forms 7.4)
- /Popup → skipped (companion subtype)
- Others → annotation extractor (7.6.3 placeholder)
- PDF date parser (D:YYYYMMDDHHmmSSOHH'mm' → ISO 8601)
- Dereference loop detection via visited set
Acceptance criteria PASS:
- Unit tests for mixed annotation subtypes
- AnnotationCommon decoding for all non-skipped annotations
- Date parsing with ISO 8601 output
- Empty /Annots handling without diagnostics
- Public API returns (Vec<LinkAnnotation>, Vec<Annotation>)
Closes: pdftract-46qa
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>