Update 58: Graph data structure modifications.

The graph's nodes and edges are stored in a hashtable instead of the
old pointer array. I have modified the graph utility/query functions
accordingly, and rewritten the invariant checker according to the
new data structure.

I also moved the stack code to a separate module.