A StateController manages state for an application or component
Subclasses extend this and expose methods that call the controller's _update method
Controller will default create its own state store unless one is passed.
StateController subclasses should only accept the dependencies they need via constructor
This means the dependencies can easily be mocked and unit tested