Mngt of available execution units + location preferences [WIP]

Management of available execution units: the Infrastructure manager now keeps
track of how many execution units are in use / free, so it knows when there are
no more execution units available on a TaskManager and schedules accordingly
(instead of the previous round-robin scheduling, which assumed that the query/all
queries will fit).

Location Preferences: Task's can specify a task to which co-location is necessary
or preferred (e.g. Update operator needs to be co-located to its mutable dataset,
head/tail datasets of iterations need to be co-located, HDFS sources should preferably
be scheduled on input splits). The scheduler then tries to fulfill these preferences
as possible and otherwise schedules nodes from sources to sinks (for a potential lazy
unrolling in the future).

missing: topologies are currently never de-registered at the WorkloadManager, so that
the InfrastructureManager currently never knows when execution units become available
again.
Added some methods to MutableDataset used by the UpdateOperator
Reuse OperatorResult instances for less object creation + GC

Note: assumes no parallelism within (chained) tasks