Add missing @throws tag.
Make set() also hook events up.

This makes set/load/unload more consistent and makes ControllerTestCase
not need to know internals as much.
Get ControllerTestCase tests working again.

Update some of the controller stubs so they work with new internals and
framework code.

Add the $name parameter to Controller. This is necessary, as a number of
derived properties are set based on the detected name. Another option
is to set all the properties in the stubs.