Initial web socket API.

This PR is to a `websocket` feature branch for later merging into `master`.
No. Only one frame can be in progress at a time. We'll enforce this with the call to this method being the start and `.close()` on the sink being the stop.

I have this not pushed yet:
```
@throws IllegalStateException if not connected, already closed, or another writer is active.
```