Initial web socket API.

This PR is to a `websocket` feature branch for later merging into `master`.
Related: in ResponseBody we have `charStream()` and `byteStream()`. In this case I think TEXT and BINARY are right anyway, because that's closer to the websocket spec.