Refactored client side async sockets

Updated the client test to use async sockets. This is getting very close
to what I envisioned for the system. It should now be fairly robust and
capable of detecting regularily closed sockets. TBD: heartbeats and
watchdogs for failed/stalled connections.