Initial web socket API.

This PR is to a `websocket` feature branch for later merging into `master`.
The spec says that you can include any data in a ping that you want and the server is required to echo it back. One suggestion is for heartbeat where the ping data includes some data to identify when it was sent when you get the pong.

I don't know if/how an application layer would use it.