Add download command with XRPC hardening and test infrastructure
Implement download-and-decrypt flow: parse AT-URI, fetch document record,
find wrapped key by DID, unwrap content key, fetch encrypted blob, decrypt
with AES-256-GCM, write plaintext to disk. Refuses to overwrite existing
files and bails on unsupported keyring encryption.
Harden XrpcClient with send_checked() combining transport.send() and HTTP
status checking into a single call — replaces 6 repeated check_response
invocations. Login keeps raw send for its custom error path.
Split AT Protocol primitives (AtUri, AtBytes, CidLink, BlobRef) into new
atproto module, reducing records.rs from 378 to 211 lines. Record types
re-export the atproto types used in their fields for backward compat.
Add MockTransport (FIFO response queue + request capture) behind a
test-utils feature flag for cross-crate testing. Add 8 download tests
exercising the full crypto roundtrip, PDS error handling, wrong-key
rejection, schema version guards, and keyring bail.
Test count: 87 → 99.