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.
That overhead would be *really, really minor*. It's not worth the trouble to keep some stale null pointers from laying around (also, I don't expect anyone to use this factory to create millions of background jobs, without the GC kicking in at all before the last one is constructed (thereby invoking modifying functions of the map)). It is a problem however to keep references to stale `Runnable`s: these beasts can keep references to anything and everything. Keeping another thread running to kill a few null pointers sure looks like overkill to me.