Initial web socket API.

This PR is to a `websocket` feature branch for later merging into `master`.
would this be like "200 OK" or something else? If it's exactly that, we may want to say "message" instead of reason for (foolish) consistency with Response.