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.
Added simple Supplier to provide a singleton Environment created during construction.
Changed how Consumer auto configuration works by introducing a new FactoryBean implementation that uses either a found bean of a specific type or creates a singleton bean from the given Supplier.
Fix a bug in the way BufferInputStream was handling data. Since it was operating on a slice, the parent buffer position wasn't being updated. This was intentional but has other side effects like not advancing to the next chunk if using the InputStream to read objects using Jackson's ObjectMapper. This change to Buffer and the JsonCodec fix the problem and provide the expected behavior of advancing the pointer in the buffer as the InputStream is being read from.
Added notification key awareness to the Event object. Added a call to Event.setKey() before dispatching the Event so that Consumers of these events have access to the actual object used to notify on. This is usually not very helpful except in the cases of regex and URI selectors, where the actual string used to notify on might be significant. It also allows for implicitly passing additional data since you can now use the notification key as a rich object rather than a simple String or Object. This would be useful for instance when doing a notify() on an HttpRequest object.
#175 initial implementation of IncrementalBackoffReconnectSpec