Websockets!

Hidden from the public, but usable via `WebSocket.newWebSocket(OkHttpClient, Request)` for now.
I don't particularly like how the locking here works. The reader thread can block waiting on the application thread's call to `close()`, and that thread can be blocked on IO. I don't see it, but it's the type of thing that can lead to deadlock.

Perhaps rather than guarding the work of closing, just guard the state of who is doing that work?

```
  public void close(int code, String reason) throws IOException {
    boolean closeConnection;

    synchronized (this) {
      if (writerClosed) return;
      writerClosed = true;
      closeConnection = readerClosed;
    }

    writer.writeClose(code, reason);
    writer = null;

    if (closeConnection) {
      closeConnection();
    }
  }
```

(and similarly in the other methods)