Split the large client/server.dart files into smaller pieces. This is in
preparation for splitting the HTTP/2 dependencies into a separate file
and make it easier to implement other transports.
What works:
* Client and server can talk to each other, all 4 RPC variants.
* Client can talk to Go gRPC server.
What (probably) doesn't work:
* Anything else.