Add DepthFirstOrder class
Add topological sort