refactor(xrpc-server)!: split error observability into onError/onSocketError
separate "produce a response" from "observe an error for telemetry" so the
router doesn't conflate them. `handleException` continues to translate
thrown errors into responses; new `onError` / `onSocketError` hooks receive
`{ error, request }` for logging/metrics and are fire-and-forget. both
observers skip client-induced errors (aborted requests, `XRPCError`,
`XRPCSubscriptionError`), so they only fire for bugs worth investigating.
`handleSubscriptionException` is removed; its default-throw behaviour was
unhelpful (unhandled rejections inside an adapter's async context), and
the new `onSocketError` is the intended replacement.