feat(canopy-medicaid): denial-code parity with canopy-tanf (DenialReasonCode enum)
Source: tanf-denial-reason-code-from-jdm plan Potential Improvements.
rulesets/georgia/medicaid-*.json rulesets already emit o-reasons outputs but canopy-medicaid does not yet round-trip them through a typed DenialReasonCode enum like canopy-tanf does. If canopy-medicaid grows cross-program event publishing (today it only receives TMA events), the same enum + Other(String) fallback pattern can be reused with no Rust-type additions required.
Acceptance: canopy-medicaid determine.rs parses ruleset o-reasons through DenialReasonCode::FromStr; events emit canonicalised codes; new variants added to the canopy-reference enum as needed (or fall through to Other(String)).