This PR changes the MarathonScheduler to search the whole taskQueue for a matching task for every given offer. If no matching task is found, it continues with the next offer. If a matching task is found, it is started with the current offer.
Furthermore the tasks in the TaskQueue are now sorted by number of constraints. This way we check the tasks with constraints first and don't assign constraint free tasks to offers with matching properties for another task in the list.