Refactor tree update to use TreeParser.parse_tree

Instead of looping through tree.program all the time to find function,
terminal, and input nodes. The new update() method in the Tree class
uses TreeParsers’s parse_tree() method to walk through the tree and
update everything, from tree.size, tree.depth, tree.func_nodes …. to
tree.branches.
Update TODO
Add new hoist mutation implementation and test
Add more mutation methods such as shrink, expand ...