Add rpcSend calls for doing request->response flows.

By adding `id` and `replyTo` to message metadata, the client can handle
the full request/response flow between services.
Use RPC for the authentication/subscription call.

This ensures that we aren't allowing things to be sent over the wire
until the authentication response has been received.

Right now, the promise will either succeed or hang indefinitely (if no
reply ever comes), but once failure detection is added to the RPC calls,
that will be automatically supported here.  I love promises.