Fix reconnect logic so only successful connections are accepted

NettyTcpClient.createReconnectListener currently accepts a connection
regardless of whether or not it connected successfully. This leads to
the Consumer<TcpConnection> registered with the Stream being driven
multiple times and with TcpConnections that are not connected.

This commit updates NettyTcpClient.createReconnectListener so that
only successful connections are accepted.

Fixes #162
Merge pull request #163 from wilkinsona/only-accept-successful-connections

Fix reconnect logic so only successful connections are accepted
Bump Disruptor version to 3.2.0.
Support multiple Consumers by creating an efficient composition of multiple Consumers down to a single Consumer. Added a test for multiple Consumers to make sure all are called once for each event.
Changes to how multiple Consumers are handled.
Tweak Processor batch processing to handle batch sizes larger than the available ringbuffer size.
Fixes #164 tweaked time incrementing code to fix a race condition
add reply to Groovy closure consumer
add cancel/reply to delegate decorator for closureEventConsumer
Running multiple event handlers in a Disruptor requires multiple threads for all of the event handlers to be invoked. But adding threads to a Processor starts dropping the throughput roughly 1/2 per thread added. In order to maintain consistently high throughput, the Processor Consumer is now a single Consumer rather than a List. If having multiple Consumers in a Processor is desirable, or there is a need to dynamically add or remove Consumers, the DelegatingConsumer can be used to manage the Consumer instances while the single DelegatingConsumer itself can be passed to the ProcessorSpec when creating the Processor.
Fix cut-and-paste typo error.
Fixes #140 Provides a special ConsumerSpec class that exposes event handling assignment in a way that's consistent with other areas within Reactor where a Spec class is used to configure components. Besides a close event handler, this TcpConnection.ConsumerSpec class exposes idleRead and idleWrite timeout handlers, which are invoked when reads or writes are idle for a given timeout value.
Changed the default RingBuffer wait strategy to YieldingWaitStrategy() because it performs better in throughput tests.
Fixed a typo in the javadoc.
Added an optimized event publishing pipeline for notifying a Reactor of events for a given key. Added a prepare(Object key) method that returns a Consumer<Event<T>> that will directly invoke the registered Consumers in the appropriate thread every time accept is called. It optimizes the notification by pre-selecting the Consumers registered for that key and then simply invokes them for each accept rather than following the dynamic path to routing the events.
Groovy builder for environment - reactor - first cut
In order to simplify groovy configuration, especially for simple scripts or grails services, reactor-groovy now provides a statically checked DSL for building environment, reactors and consumers
Leave a constructor to set threadpool name
call onComplete after all consumers
Add consumer support to groovy reactor builder
Renamed abstract Dispatcher class to BaseLifecycleDispatcher to be more consistent with its base class, the BaseDispatcher.