Refactor parse_gp_tree to return array of pointers

Instead of returning a copy of the nodes in the gp tree, it contains
pointers to the actual nodes in the tree, so that crossover and mutation
operations can be performed without having to do too much book keeping.
Or so I think*.