This commit adds a Timer interface implemented by HashWheelTimer

HashWheelTimer itself is implemented as per the "Hashed and Hierarchical
Timing Wheels" paper: http://www.cs.columbia.edu/~nahum/w6998/papers/sosp87-timing-wheels.pdf

This implementation doesn't involve hierarchical Timing Wheels.

This implementation provides three types of wait strategies:

   * Sleep: least precise, but most scheduler-friendly, uses
     `Thread.sleep` under the hood.
   * Yielding: more precise, and scheduler firendly, uses `Thread.yield`
     under the hood.
   * BusySpin: most precise, least scheduler friendly, doesn't release
     flow control, therefore occupies an entire core on multi-core
     systems.

Executors are configurable through the constructor. By default, single
threaded executor is used.

Loop thread name is configurable through the constructor.
Tweaks to suppress compiler warnings.
Fixes #281 Uses a nullSafeHashCode() function to accommodate null values in a Tuple.
#279 Drop the default backlog values to 2048.
Upgrade TaskExecutor implementations to also implement ScheduledExecutorService for us as a Spring Integration TaskScheduler, which requires greater scheduling flexibility than just an Executor.
Add resolution getter to Timers.
Tweaks to RingBufferAllocator batch allocation.
Merge branch 'refs/heads/master' into enhancement-27-batchNotify