WebSockets - implementation proposal for issue #125

This implementation is based solely on existing Netty's WebSockets implementation.

Client example:
```java
WebSocketClient<WebSocketFrame> rxClient = RxNetty.newWebSocketClientBuilder("localhost", port)
            .withWebSocketURI("/websocket")
            .withWebSocketVersion(WebSocketVersion.V13)
            .build();

rxClient.connect().flatMap(
    new Func1<ObservableConnection<WebSocketFrame, WebSocketFrame>, Observable<Void>>() {
        ....
    });
```

Server example:
```java
RxServer<WebSocketFrame, WebSocketFrame> server = RxNetty.
        newWebSocketServerBuilder(port, new ConnectionHandler<WebSocketFrame, WebSocketFrame>() {
            @Override
            public Observable<Void> handle(
                final ObservableConnection<WebSocketFrame, WebSocketFrame> newConnection) {
                    ....
                })
    }).build().start();
```

The code flow guarantees that the future will be set only once for both success and failure situations.
This could be violated if caller of ```WebSocketClientHandler.handshakeFuture``` manipulates the future object (it does not now, but some additional/custom handlers might). To prevent this I will replace the latter method with ```WebSocketClientHandler.addHandshakeFinishedListener```.