individual.py
*************

Define an individual to be used for evolution.
    
Class Variables
===============

``ID``
-------
A trackable ID generator

Instance variables
==================

``id``
------
A trackable identifier for the individual

``chromosomes``
---------------
An ordered collection of the genetic material of this individual. Maintained as a list

Methods
========

``__eq__(self, other)``
------------------------
Return True if all chromosomes of self and other are equal (and in the same order).
Else, return False

``__hash__(self)``
-------------------
Return the hash of the tuple version of all chromosomes

``__len__(self)``
Return the number of chromosomes ``self`` is made of.

``__getitem__(self, i)``
------------------------
Return the `i` th individual

``__setitem__(self, index, obj)``
---------------------------------
Set obj as the `index`th chromosome of ``self``
        
``__contains__(self, chromosome)``
----------------------------------
Return True if ``chromosome`` is a member of ``self.chromosomes``.
Else return False

``__repr__(self)``
-------------------
Return ``self.id`` as a string

``append(self, chrom)``
-----------------------
Append ``chrom`` to ``self.chromosomes``

``count(self, sub, chrom)``
Return the number of occurrences of ``sub`` in the ``chrom`` th chromosome of ``self``