Add Controller type to hold all the timers and outputs.

This will allow the webserver to simply be an adapter for the internal
interfaces that the Controller will expose.
Add virtual output implementation.

This implements the Output interface, and simply maintains state in an
internal variable.  It doesn't interact with any actualy output system
in any way.  This is useful in tests, and could be used in a polling-type
output implementation.
Switch timer tests to use virtual output.

This is simpler and less brittle than using the mock approach
Refactor most webserver tests to use virtual output.
Add OutputActive method to Timer.

To return the timer's current output state.
Return output state in Timer API request.