Resolve PDS from handle; make PDS env optional
New atproto/identity.py does handle → DID → PDS in two HTTPS hops
(public bsky appview + PLC directory, with did:web fallback). Config
no longer requires PDS; ATProtoClient resolves it lazily inside
_ensure_session under the existing session lock, so the first auth
call pays the cost and subsequent requests see the cached value.
No new deps.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>