fix(identity-wallet): address code review feedback for pds_client
- Replace manual Display/Error impl with #[derive(thiserror::Error)] and #[error(...)] attributes
- Rename PdsUnreachable.source to .reason to avoid thiserror's automatic source field detection
- All error variants now use thiserror's error attribute macros
- Add httpmock-based tests for try_resolve_http with 4 test cases:
- test_try_resolve_http_success: 200 returns Some(did)
- test_try_resolve_http_with_whitespace: 200 with whitespace is trimmed
- test_try_resolve_http_not_found: 404 returns None
- test_try_resolve_http_server_error: 500 returns None
- Replaces weak tests: test_http_response_parsing_with_whitespace and test_resolve_handle_orchestration_with_nonexistent_handle
- Change XRPC .map_err(|_|) to .map_err(|e|) to capture error context in messages at lines 552, 573, 597
- Remove redundant .header('Content-Type', 'application/x-www-form-urlencoded') from pds_par and pds_token_exchange (reqwest.form() sets it automatically)
- Fix test mock from GET to HEAD for PDS reachability check (AC3.8)
- Remove Content-Type header checks from PAR and token exchange tests
- Add TODO comment on #[allow(dead_code)] for Phase 4 cleanup