Add simple range iterations and get_time() etc.

This couples each level to the controller, and lets the controller keep
track of, eg, which step and iteration is being operated on.  This
allows sweepers etc to get at this data consistently, and simplifies
various method signatures.