DFS-based topological sort. A valid sort is the reverse of
the post-order DFA traversal. Amazingly simple but true.
For sorting, I'm not following convention here since ANTLR
needs the opposite. Here's what I assume for sorting:
If there exists an edge u -> v then u depends on v and v
must happen before u.
So if this gives nonreversed postorder traversal, I get the order