Implementing RandomGenerator singleton object
Rearranging minor things

Node::size() returns a const Size struct
Refactoring get_data() into problem namespace

For reading pairs of (x, y) from a file.
Refactoring constructor to use set_constant()
More comments for node.evaluate()
Adding single node mutation method
Storing arity as int on node

Space for time trade-off; minimum number of find() calls
Adding null and greater than functions, renaming cond to lesser

I use to null to be able to indicate a default Node with no
type (default 0, but also explicitly set to null which is the first enum
and therefore also 0). This is very handy for the visit() function which
must return a Node reference; if I haven't found the target, I can
return a default "empty" node.

Also added the greater than condition to complement lesser than
condition. For consistency.
Renaming type to function just because
Adding aforementioned recursive node visit function
Adding set_constant() method to class definition
Cleaning up evaluation print output
Adding recursive mutate_tree() function

Calls mutate_self() (used to be mutate()) with problem.mutate_chance
probability
Overloading Individual[i] to call root.visit(i)
Individual.mutate() calls root.mutate_tree()
Reordering methods in individual
Adding basic Individual friend crossover() function

Takes two (previously selected) Individual references and swaps a random
subtree of each with the other.
Adding mutate_chance and crossover_chance to problem