Shared matcher core migration
The per-plugin matching code now subclasses a single shared FuzzyMatcherCore, vendored byte-identically into the inner folder as matching_core.py. Lineuparr is a FULL subclass (inherits normalize_name plus the shared primitives).
- The vendored core is sha256-pinned (.github/scripts/core_manifest.json) and enforced by a parity gate plus a golden gate in CI. matching_core.py ships with the code: fuzzy_matcher.py imports FuzzyMatcherCore from it, so the plugin will not load without it.
- Lineuparr keeps its bare-region stripping (Pacific/Central/Mountain/Atlantic) via the _STRIP_BARE_REGION opt-in.
- calculate_similarity applies a Python ">= min_ratio" gate (replacing rapidfuzz score_cutoff). No change to live match decisions.
Packaging built with git archive (forward-slash paths, bug-087 safe) and validated with scripts/validate_zip.py (matching_core.py included).