Add unit tests for AdvectionDiffusion example and change how state is passed to sweepers.

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.

In particular, this allows the AdvectionDiffusion example build up a map of errors which can be used for unit testing.