Biggest optimization of all times?

The entire notion of the "tree" is now gone.  The tree no longer
exists in memory.  Instead of keeping the tree in memory, we just
put solved states into a hash table along with the best action to
use in that state.  Then, the process of playing back a synthesis
is simply a matter of, at each step, looking up the best action
by keying off of your current state.  No actual path structure
is maintained, only a hash table mapping states to solution info.

Preliminary testing has indicated the following improvements:

1) A 90% reduction in memory usage by not keeping the tree in mem.
2) A 2,400% increase in speed!!  (wut?)
3) Significantly better analysis quality at the same analysis depth.
4) The Analyzer code is significantly easier to read and understand.