Refactor tree header define names
Refactor terminal and function code out of tree
Update docs and cartesian
Add asserts to address grid
Move address_grid and valid_addrs to cartesian_config
Refactor cartesian_valid_addrs() to return min max

Instead of returning an array of possible valid address for a connection
gene, the function now returns an array containing the min, max of valid
addresses.
Add ability to generate random genes for cartesian
Refactor valid address array

Remove confusion regarding valid address array
('cartesian_config->valid_addrs'). Now the array index is adjusted to
proper column level.
Add cartesian_random_function()
Refactor cartesian_column_level() for output nodes
Add cartesian_generate()
Add cartesian_population()
Minor refactor
Add function_max_arity()
Add basic threads code

Tryin my hand in threading, so far I can create and wait on threads,
this code will soon be incorperated into parallelizing the GP.
Add thread state
Add threading code - but is not faster

For some reason the multi-threaded code does not perform better than a
single threaded code. Initial thoughts are perhaps the data should be
partitioned to the threads individual thread_data struct, instead of
pointing to a single shared data address.
Refact timing method for benchmarking threads

Turns out I was using the wrong method for doing timing, I was timing
using the CPU clock, which from the CPU perspective of course the
threaded version was going to be more than the single thread version. So
with the following changes it now shows the threaded version of the code
is roughly 2x faster. But that is still a bit unsatisfactory, further
tests need to be done to see if that is because my laptop only has two
cores.
Add struct regression_data

The idea is to hopefully replace struct thread_data, so that it can be
problem specific.
Update ycm config to ignore time.h errors