Fix streaming tail in groovy builder.
Make sure include populate environment before reactor.
Add stream(String key, Closure) to ReactorBuilder
More ReactorBuilder tests
comment random failure
Environment was previously only creating a single event loop dispatcher rather than the configured number of them which would be doled out round robin fashion. This change adds logic to the Environment which recognizes the size property and configures the correct number of BlockingQueueDispatchers.
Update gradle wrapper jar.
allow to configure Environment with given Timer
Fix intermittent test failure on unsynchronized List in BoundarySpec test.
minor teaks
fix accept extension for Deferred
Added parameter to Boundary.bind to configure a CountDownLatch with a given expected count.
Merge pull request #174 from splix/master

allow to configure Environment with given Timer
Superficial formatting changes.
Implemented an efficient HashWheelTimer using Reactor Consumer and an internal Registry. Whether a task is assigned to a specific hash wheel slot is determined based on an internal custom Selector. All times are rounded up to the nearest multiple of the configured tick resolution (default of 50ms).

Since it uses a Registry internally and returns Registration objects when submitting tasks, the user can efficiently cancel, pause, and resume them.
Integrated new HashWheelTimer into Environment instead of relying on java.util.Timer, which is not completely portable. Also had to tweak the NettyTcpClient to accommodate the new API.
Add a method to the Processor to commit a list of Operations. This provides a sort-of-batch mode where you can allocate a number of Operations without committing them, then use the RingBuffer batch publish to commit all of them at once for a little more efficiency.
Removed high_scale_lib from the dependencies and replaced the use of NonBlockingHashSet with a simple synchronized version. Also tweaked InMemoryQueuePersistor to use a simple synchronized Map as well.
Modified the AsyncAppender to use the Reactor Processor abstraction instead of the RingBuffer directly. Implemented a Queue-based approach so that each AsyncAppender needs two threads now instead of 1: the thread to power the RingBuffer and a separate publisher thread that pulls items from a queue and publishes them in the RingBuffer.

The reason for this indirection is throughput. Much higher throughputs can be achieved this way than by directly using the Processor to publish log events. In profiling the component, it was clear that running tasks like log file writing inside the RingBuffer event handler is suboptimal when there are multiple producers. Now multiple producers simply add their log events to an internal Queue which the publisher thread drains as quickly as possible. The Processor is then called with a batch size equal to the number of events just pulled off the Queue. This provides an order of magnitude higher throughput than direct publishing of Operations through the Processor.
Turning off TCP client/server tests for the moment due to intermittent build failures on different kinds of machines for no apparent reason.
Added submit function to HashWheelTimer for submitting tasks to run at the next wheel stop (uses the resolutino of the timer to round up to the nearest N time value and schedules the task to run then). Same as using submit(task, delay, unit) with a delay value of HashWheelTimer.resolution in milliseconds.
Add a roundRobin load-balanacing helper method to Suppliers that takes an array of objects and returns a Supplier who round-robins the provided array of objects on each call to get().
Created a FactoryBean for HashWheelTimers that also allows you to specify a number of timers to create, making it possible to pool the timers and get complete CPU saturation of submitted tasks.