feat(auth): DPoP nonce store — issue, validate_and_consume, cleanup_expired
Implements MM-77.AC3 nonce management:
- issue_nonce: Generate 22-char base64url nonce, store with 5-min TTL
- validate_and_consume_nonce: Verify and consume nonce (once only, reject if expired/unknown)
- cleanup_expired_nonces: Prune expired nonces on each token request
Adds comprehensive unit tests verifying:
- Fresh nonce validates exactly once (AC3.1)
- Unknown nonces rejected (AC3.4)
- Expired nonces rejected (AC3.3)
- Cleanup preserves fresh nonces while pruning expired ones
- Nonce format is 22-char base64url (16 random bytes)
All 54 auth tests pass.