Always identify the jobs dispatched to threads in the threadpool with
the unique ids.

* Dropped the dependency from the original ThreadPool class from twisted.
  There were to many method overriden in the children class to try to
  pretend this is class inheritance.
* Simplify the threads interface. Only defer_to_thread is exposed to public.
* Rename the class to ThreadPool.
* If a Deferred returned by defer_to_thread gets cancelled the jobs is given
  10 seconds to terminate itself. After that it gets killed by injecting
  lethal Exception into the threads context.
* All the threads are joined, even if they died in the middle.
* Don't deadlock during stop(). The threads are join only when they notify
  they main thread that they are joinable. Reactor is not blocked until this
  happens. The stop() method is asynchronous.
* Use snake_case method naming consitently everywhere.