(temporarily) remove debugging print functions
refactor NFA to use a graph instead of list of edges

Of course, NFAs (and DFAs) can be imagined as directed, weighted (ie
with labeled edges) graphs. Right now, using ListGraph is equivalent
to lists of NFAedges, along with the performance drawbacks, but I
think extracting this out will allow me to experiment with alternate
implementations and eventually arrive at a more performant
underlying implementation of finite automata.
refactor DFA to use a graph instead of list of edges

This is slightly less important to do since the NFA to DFA conversion
code is where the performance issue is, however for
consistency... anything else would be slightly weird.