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.
I'd rather warn the implementer in the javadoc instead of forcing him to implement another interface on his runnables. Regarding the constructor: it's perfectly valid to use the constructor directly, you just miss out on the (relatively minor) benefits of the factory. There's no reason to make the constructor package-private and recommend the factory; the factory performs no additional validation. I will add the annotation to point to the existence of the factory, however.