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.~~
When not wrapping numbers in a container class which makes their gauge unit obvious, please suffix their variable name with the unit, such as:
```long timeoutMilliSeconds```
This helps users with IDEs which immediately display the variable name in autocomplete but not the JavaDoc.