Contracts: Independent podium timers (Streak, Time Booster, WarBow) + epoch settlement
## Context
Independent podium timers and per-podium epoch settlement. Parent epic: #238.
## Relevant files
- `contracts/src/TimeArena.sol`
- `contracts/src/libraries/TimeMath.sol`
- Per-podium score tracking (adapt from `TimeCurve.sol` `_updateTopThreeMonotonic`, streak/booster logic)
## Acceptance criteria
- [ ] Four deadline storage slots + four epoch counters
- [ ] Each buy extends **all four** podium timers with **podium-specific** extension/reset params (see spec issue)
- [ ] On podium epoch end (deadline passed + qualifying buy or permissionless `rollPodiumEpoch(category)`):
- Snapshot top-3 (or last-3 for Last Buy)
- Pay winners from that podium's DOUB pool (4:2:1 within category)
- Roll seed vault → active pool
- Increment podium epoch; **reset live scores** for that podium only
- [ ] Last Buy reset additionally triggers global Last Buy epoch (CHARM/CRED)
## Verification checklist
- [ ] Forge: Streak/TimeBooster/WarBow timers diverge from Last Buy after different buy patterns
- [ ] Epoch counters independent (assert unequal after time skew)
issue