Connection pool refactoring.

This is still WIP. The following are the todo:

1) Idle connection cleanup thread is not implemented.
2) More tests need to be written and the older one needs to be fixed.
Connection Pool refactoring.

* Modified Connection pool interface to also send PipelineConfigurator to acquire(). This is required as the pipelineConfigurator is modified by the client to accommodate all RxNetty specific handlers. Storing the pipeline configurator provided by the user does not work for the pool.
* The shutdown of eventloop during client shutdown will shutdown the shared eventloop (by default). Added ref counting on the shared eventloop group, so it only shutsdown if there are no more references.
* Removed shutdown() call from waitTillShutdown() in RxServer as it is used as a waiting mechanism for an external shutdown for a server.
* Enabled ClientRequestResponseConverter to be reused by resetting the contentSubject.
* Added more tests and fixed the existing tests.
Fixing some tests which were too sensitive to timeout values.
Implemented a background cleanup task for idle connections.

Modified the mock RequestProcessor to not sleep in the request processing as that blocks the eventloop and hence produces unnecessary delays in the parallel executing tests.
Added a composite pool stats impl.
Few more changes to the API.

1) Eliminated PoolStateChangeListener for an Observer. The pool now uses Observable to publish the state change events.
2) Added way to retrieve PoolStats and subscribe to change events from RxClient. This is the only way to access the pool. The reason why connection pool instance is not exposed from the RxClient is that it has write operations too.
Incorporated review comments by @awang

1) Minor code cleanups
2) Added test case for PoolLimitDeterminationStrategy. There were bugs in it :)
Fix to PooledConnection.

The lastReturnToPoolTimeMillis was not getting updated as the Observable returned from close() was never subscribed to.
Since, release is synchronous, we do not need finallyDo() to update this stats.
Using a different eventloop group for ConnectionPoolTest as the close notifications get delayed in some build machines due to shared eventloop group.
Attempt to fix the flaky test (only in cloudbees)
Introducing PoolStatsProvider to aid providing an external PoolStats implementation to the pool.
Added more tests for the strategy
Renaming PoolInsightProvider.StateChangeEvent to PoolInsightProvider.PoolStateChangeEvent
Merge pull request #95 from NiteshKant/master

Connection pool refactoring