Background jobs

This changeset introduces an abstraction for (maintenance) jobs running in the background, of which execution may be triggered from other threads. SubscriptionManager could very well use this, but I haven't made it do so yet.

@xor-freenet Unit tests are not complete, I'll be finishing those tomorrow. I'm filing this pull request early so you can have a look at it already.
> Runnable job

Remember one of the primary goals of the rewrite was also fast shutdown, and you support that by interrupt()ing the thread already. Thus, to tell the implementor that interrupt() will be used during shutdown, you might instead consume a sub-interface like this:

    interface InterruptableRunnable {
      /** @throws InterruptedException The DelayedBackgroundJob will use Thread.interrupt() during shutdown to request your run() to terminate. You are allowed to throw InterruptedException to honour this request. */
      public abstract void run() throws InterruptedException;
    }