Handle errors on send() due to closed socket.

Also, more logging of the various close conditions,
and handle SocketException specifically on read()
to avoid printing a stack trace for it.

We ignore errors on send (don't throw them up),
except that we force-close the socket as a double
check that we'll get rid of the client.
Merge pull request #162 from sbt/wip/handle-socket-fail

Handle errors on send() due to closed socket.