added MessageSender and MessageReceiver helper functions
to provide a channel interface for a connected sockets,
exclusively for Messages.

Refactored HandleConnection to use these in goroutines,
fixing certain bugs regarding sending/receiving messages.

There's possibility of blocking in MessageSender and
MessageReceiver, so think about setting a connection timeout,
or using buffered channels. It also remains to upgrade
the client to use these, getting us out of the explicit
send/receive/repeat loop