Update 59: Graph Data Structure

The node/edge store has been re-implemented as a pointer array, but
this time I use my own instead of the GPtrArray. Ditto for the adjacent
edge references in the node structures.

Implemented a graph backtracking system that works by copying the
working graph into heap and placing it on a global graph stack.
Restoring the graph is a simple matter of popping the graph stack.
I also wrote a function to free a stack which takes the stack to free
and a function to free its data.

Rewrote the validGraph function and added some more invariants.

Updated the comments in the header file and fixed some minor bugs.