Transmission #035: Punch stat wired to combat (Step 3)

Step 3: StatId.Punches increments from real attack commits — PlayerCombat.TryPerformAttack (keyboard/desktop melee), PlayerMovesetDriver snappy light/heavy sticks (always melee), and button-driven CommitAttackAnimation paths only when PlayerCombat.ActionIdCountsAsPunchStat is true (unarmed/armed/air melee and grab attack 302, excluding ranged 30–41 and defense). NotifyPunchAttackInputCommittedForStats forwards to PlayerStatTrackerProvider. Edit Mode tests cover the action-id filter. Implementation plan Step 3 checked off.