Enable message handlers being attached to clients

This adds addHandlers which manages a map of message handlers. When
a message is received all handlers that are registered for the message's
type are called.
Add message sending capabilities for clients

Messages are queue by Client::send() and then actually sent on each
invocation of Client::exec().