Added CachingDirectedGraphWalker.getCycles() to find cycles in the graph.
Don't fail when a cycle is detected when building the task graph. Instead fail during traversal and report on all the tasks in the cycle, not just two of them.