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.