Move lock acquisition to the top of Process() instead of per-case.
Previously UserAdded and UserRemoved read the privileges map without
holding any lock, causing data races with concurrent Fetch/IsAllowed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add WithAPIKey option to set a Bearer token on requests to the
authz-service /authz endpoint. When set, Fetch() includes an
Authorization header. Backward compatible - no key means no header.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>