Implemented rough hierarchy for shape detection, able to detect
circles, rectangles and squares. Have combined the various CA's into
one, although the performance benefit seems minimal. Changed cell
neighbourhoods from arrays to lists, which allows greater flexibility
(doesn't affect performance). Using HashSet to store protoShapes instead
of LinkedList improved performance. Experimented with colour comparison
using only integers, hardly any performance benefit, reverted to
floats, which give much greater precision.