Implement OONI task scheduler
OONI's current task dispatch methods should be replaced with a task scheduler that has the following properties:
scheduler should be able to maintain a constant size set of running tasks, and should not block on any single task. scheduler should provide mechanisms for starting, stopping, restarting, resuming, and cancelling tasks. scheduler should support changing the number of running tasks at runtime. scheduler should be able to set hard limits on the time a task may take to complete.
The twisted framework provides some handy tools, see: twisted.internet.task.Cooperator and CooperativeTask (http://twistedmatrix.com/documents/current/api/twisted.internet.task.html)
Also see examples such as txRDQ (Resizable Dispatch Queue): https://launchpad.net/txrdq