Simplified state watcher

- The user now registers for state updates from the controller, sent
every time the state reader updates.
- No longer require lock on the state, a clone is sent to the UI thread.
- State watcher no longer requires its own thread.
- State watcher only sends state updates to the UI at a maximum
frequency.