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();
```

This means some work around ConnectionLifecycleHandler.
We could solve this problem in a generic way, to handle any connection upgrade, but for this we will need some extra API. Probably it should not be a public API, but more like SPI for building RxNetty extensions. So with this API I could say:
1. this is the first pipeline, it will call you back one work is done
2. this is second pipeline, apply it when callback is received
3. now it is time to hook-in the application connection handler

I would wait with modifying existing WebSockets implementation till we have this generic mechanism in place.