feat(service): add PersonTypeClassifier with keyword heuristics
Static classify() method uses position-aware keyword matching:
- SKIP: Briefumschlag, Kondolenzbriefe, Hochzeitsgedicht (start)
- INSTITUTION: Firma, Architekt (start), GmbH, Co (end)
- GROUP: Familie, Comité, Comite, Geschwister, Gesellschafter,
Garde, Mitarbeiter (start), Eltern, Kinder,
Schwiegereltern (word boundary)
- PERSON: default for all other inputs
Case-insensitive. 25 parameterized test cases.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>