feat(oauth-client): fake AS performs real PAR/authorize/token with DPoP + PKCE + private_key_jwt validation
- Extend AppState with seen_jtis, pending_par, codes, public_jwk_by_thumbprint
- Implement par() endpoint: parse form body, validate code_challenge/method, parse DPoP proof, verify signature against inline jwk, record jti for replay detection, handle DpopNonceRetryOnPar flow
- Implement authorize() endpoint: look up pending PAR, dispatch on flow_script (Approve/Deny/PartialGrant), generate code, bind to scope
- Implement token() endpoint: handle authorization_code and refresh_token grants, validate code_verifier against S256 challenge, validate DPoP proof, mint tokens bound to DPoP thumbprint, enforce single-use refresh token rotation, detect DPoP jti replay
- Add helper functions: compute_dpop_thumbprint (RFC 9449), decode_jws_unverified, verify_dpop_signature
- Add data structures: ParParams, ParRequestSnapshot, CodeBinding, TokenParams
- Update TokenBinding struct to include used flag for single-use rotation
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>