Added object classification to Hist node, and other enabling code

[Apologies for the monster-sized commit. It was necessary for most of
it]

- Changes to AbstractAINode: 
-- Removed getVisionGraph() in favour of getDrawableVisionGraph(). This
is because the underlying visionGraph can now take any form it likes in
AINodes, but this is the form in which we would like it for drawing. The
getVisionGraph() method is left in Active and Hist, but not for foreign
use
-- Added a few abstract methods starting with 'vg'. These are accessor
methods for the vision graph object which allow more generalised access
to the visionGraph so that they apply to any underlying representation.
They are called from the code in the Active node; in particular, the
multicast/broadcast code, so overriding these as an extending class
should be sufficient to modify visionGraph behaviour.

- Changes to ActiveAINode:
-- Adherence to new AbstractAINode spec. All code calling visionGraph
code now passes along the ITrObjectRepresentation too
-- Some other tidy up

- Changes to HistoricalAINode:
-- Summary is that object classification was added, with separate
pheromones for each category
-- Added 'ClassificationEnabled' param
-- Added 'ObjectCategories' param
-- Implemented new methods from AbstractAINode (which either use new
classification code or pass up to super, depending on whether
ClassificationEnabled is set to true)
-- Classification code no longer asks for CameraController (not needed
after all)
-- Objects are now classified according to the first two positions
rather than the latest two. That is, where they entered from rather than
where they are at the time of the broadcast.
-- Object heading is now computed in an 'absolute' manner. That is, two
cameras facing opposite directions will both classify the object as
heading 'east' regardless of their own direction
-- This class now contains its own visionGraph, which is a map of
cameras to maps of categories to pheromone values.
-- The drawableVisionGraph gives, for each link to a camera, the average
of the values in all the categories it contains.

- CameraController now reads the 'drawableVisionGraph()' rather than the
'visionGraph()'
- Same for WorldView