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.
There really can be multiple triggers, we only happen to keep only the oldest (or stated differently, first) one.
Consider the following execution on a background job with a 50 ms delay:
```
0ms  TRIGGER   <--- this trigger is stored a oldestTrigger
5ms  TRIGGER   <--- ignored
10ms TRIGGER   <--- ignored
50ms RUN       <--- 50ms after oldestTrigger
```