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.
The `Ticker` will run this runnable in its own timer thread, since it's a `FastRunnable`. According to nextgens, tickers are only suitable for short timing-sensitive tasks (they may choose to run the task on the timer thread). We then use the executor to actually execute the task in a separate thread (this execution scheduling can be considered a very short task indeed).
This approach has a major benefit over using a separate `Timer`: each `Timer` spawns another new thread. If we reuse the node's `node.executor` and `node.executor.getTicker()` (or `node.getTicker()`), we use that single timer thread instead.