Think that the generateRandomTree method is working, would be nice to
trace out what is actually happening. next time add a few printlns to
get the class of the function. otherwise the function works (however
we still need to account for variable assingment)
Made it so that tree.eval() takes a hash table which can be used to
evaluate variables. Also, variables are treated as strings and looked
up in the TerminalNode class. Println testing reflects that it works.
Now to implement crossover