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 do understand that its valid to call trigger() multiple times, but only the oldest is stored.
IF you implement allowing specifying the delay for each call to trigger(), a suitable change would be to name it "scheduledExecutionTime" - notice how this would change the semantics of the content, because right now the semantics are "time at which trigger() was called", i.e. the delay is not included.