Jobs and tasks

Change Job definition as previously discussed: Job now means a collection of identical Tasks.

Also, change the semantics of job scheduling to make it the true atom of the scheduler.
A compile-time guarantee that an instance of mockTaskScheduler satisfies the taskScheduler interface.