Introduce `ClientTransport` and `ClientTransportProvider` interfaces so the client can become transport agnostic.