Introducing a `VariableManager` and using it for globals

This is a rethinking of a commit from earlier today, where I made
global variables accessible directly by name.  This was on the right
track, but I had doubts about it, and a quick look at
`Turtle.getTurtleVariable` validates those doubts.  All too often, there
are cases were variables don't actually live in the agent's array of
variables; they come from elsewhere--some direct member of the agent or
another object from which the agent is composed.  And, after all, why
should an agent's variable **need** to live directly on the agent?

All of this in mind, I created `VariableManager`.  Through two different
means, it manages variables being gotten or set:

  * Immediate lookup from the agent's array of variables
  * Mediation through a lookup/set function (e.g. a getter function
    called for getting a turtle's `xcor` would be something like
    `=> @xcor()`)

I expect that this should handle all cases with relatively good
performance.  Benchmarks of the new code have shown no noticeable
performance hit.

Half-related note: I also played with the idea of having the variable
manager sanitize the variable names, rather than having the compiler and
clients of the interface worry about sanitizing their variable names,
but it caused a massive performance hit--nearly a 100% run time increase
for BZ Benchmark.  I think it would make for a nicer interface, but that
kind of performance penalty just isn't okay.