Adding GraphAlgorithms with BFS and topological sort.
[SCHED-12] Adding a GraphScheduler

GraphScheduler takes a Graph of tasks, and executes the tasks in topological order. Tasks which are able to be executed in parallel (because neither depends on the other) are executed using different resources.
Defined TaskGraph and GraphScheduler constructor.
Outline of a StatefulScheduler trait, along with a stub for GraphScheduler.