The timeout factory.
This is written with performance in mind. In case of n
active timeouts, creating, cancelling and firing timeouts all operate
in time O(log(n)).
If a timeout is cancelled, the timeout is not discarded. Instead the
timeout is saved to be reused for another timeout. This means that if
no timeouts are fired, this class will eventually operate without
allocating anything on the heap.