ENH: Updated expression evaluation system

All expressions must now be wrapped in an ExpressionNamespace object
which handles caching of values and getting the next value from
expressions that are generators.  As a consequence of this modification,
we can now indicate that an expression (defining a generator) returns a
new value *only* when another expression (also defining a generator)
raises a StopIteration.  As an example of what this allows us to do, we
can now loop through a sequence of levels.  Once that sequence is
exhaused, we shift to the next frequency and then loop through the
levels again.
CLN: Move tests to a common test folder
ENH: Update abstract classes to use new exp eval

The abstract base classes (e.g. AbstractController) now use the new
expression evaluation system (i.e. ExpressionNamespace).  The eval
system has also been updated with new syntax to indicate when a
generator should be updated via an expression::

    u(<generator expression>, <dependency>)

This is sort of a hack, but should work.  Here, <generator expression>
defines the expression that returns a generator and <dependency>
indicates which expression to monitor for a StopIteration condition.
When the StopIteration condition is detected, the current generator's
next method is called.