Add a task scheduler for tests and reports

Hellais: Basically previously we had the problem that all tests where run at blocks on input_unit_size and we would have to wait for every block of inputs to complete before going on to the next block (example input_unit_size 200, if one of these is taking 100 seconds then the whole block will take 100 seconds before moving onto the next block of 200 items).

This is a performance problem, but most importantly we had no way of telling if a measurement (a test_method + an input) was taking to long to complete and if so re-schedule it.

In this branch we have support for keeping always a certain number of measurements running at a given time (this value is configurable).

If a measurement fails we will automatically re-schedule it.

If a measurement takes to long to run we will consider it to have failed and reschedule it.

The number of seconds after which a measurement should be considered failed is configurable (currently hardcoded).

The amount of times a test should be retried is configurable (currently hardcoded and set to 3).

The scheduling of Measurements is handled in the same way that we handle scheduling of writing of reports. This means that we can report to multiple backend reporters at the same time.

This branch also implements an observer pattern where we have a main Directory object that has a view on the currently running nettests.

We have two main task managers, one for handling of reports and one for handling of measurements.

They are designed in a way that we will be able to implement rate limiting on the amount of measurements that should be scheduled per unit of time (think ooniprobe stealth mode) or have them all fire as fast as possible (think ooniprobe router melt mode).