Give a better error message when disconnects happen

Related to #7, but I'm not convinced this is the best way to do this.

Additionally, there is other error handling that needs to be done elsewhere, and it seems like it would be more reliable to implement a asyncio Protocol instead of doing the low level socket interface.