Netflix/RxNetty — pull request #120 by NiteshKant (2014-05-17 03:06:52+00:00)
Title: Fix for issue #117 #114 #113 #88

Issue #117: This was a major issue with the RxClient implementation which was mutating (updating ChannelInitializer) in the bootstrap for every connect. The reason for doing this was to have a ClientLifecycleListener provide connection events. This design was naively taken from the RxServer but does not apply for the client as the LifecycleListener requires an observer which changes for the client per connection.
This change fixes this issue by removing the newConnection notification responsibility from the LifecycleListener and have it done by the ClientChannelFactory. This also enabled to remove a few other redundant constructs like the AbstractChannelFactory which was unnecessarily complex. So, the code looks much cleaner now :)

Issue #114: rx-netty core was using numerus for LongAdder implementation. Now it uses netty's internal backport of LongAdder.

Issue #113: Rewrote the Redirect implementation as an Rx operator. This makes the code much cleaner and provides a very useful feature of being able to elect which HttpClient implementation must be used for executing redirects. This was a major limitation of the previous approach.

Issue #88: Provide an implementation of CompositeHttpClient which is a composite of HttpClients per ServerInfo. This provides additional submit() methods which also takes a host, port. By default this client submits requests to localhost.
RxNetty now has two flavors of createHttpRequest() that takes a HttpClientRequest with the full URI set and uses an appropriate HttpClient instance to execute this request.
Now, one can use a shorthand:

```
RxNetty.createHttpRequest(HttpClientRequest.createGet("http://localhost:8080/hello"))
```

to submit a request with full URI which was not previously possible.