Hook up the web socket reader and writer together.

Add a simple real-world recipe which talks to an echo server.
This is racy. Reader and writer close simultaneously:

T1 peerClose reads `writerClosed = false`
T2 close writes `writerClosed = true`
T2 reads `readerClosed=false`
T1 writes `readerClosed=true`

Both are closed, but nobody called `closeConnection()`. Fix is easy. Just assign `readerClosed = true` before reading writerClosed.