[Individual]: Added "species ID" parameter to make species comparison easier

Added a "species ID" parameter to the Individual class to make comparing
species easier, and to make it possible to compare individuals of the same
species with different genome lengths (which can occur with some crossover
operators).

Signed-off-by: Sebastian Lenartowicz <slenarto@uoguelph.ca>
[Crossovers]: Made crossovers more tolerant of differing genome lengths

Made the existing crossover operators more tolerant of genomes with
different lengths. If the two genomes supplied to the operator have
differing lengths, the resultant children will have genomes that are the
shorter length.

Signed-off-by: Sebastian Lenartowicz <slenarto@uoguelph.ca>
[N-Point Crossover]: Fixed potential segfault

Fixed a potential segfault in the n-point crossover operator that might
result from it looking for a point that does not exist (e.g. a third point
in a 2-point system).

Signed-off-by: Sebastian Lenartowicz <slenarto@uoguelph.ca>
[Individual]: Made Individual more tolerant of differing genome lengths

Reworked the Individual and CrossoverOperation classes to make Individual
more tolerant of offspring with genome lengths that are different than
those of the parents by using the new Genome class instead of an int array.

Signed-off-by: Sebastian Lenartowicz <slenarto@uoguelph.ca>