WIP - Clean up hook and action behavior.

- When you run a controller it goes into the isRunning state and creates an
  outer computation for the run.
- A few things get run in sequence:
  1. set layout
  2. run onRun hooks
  3. computation -> run waitOn functions and populate waitlist
  4. computation -> when ready() set data
    - run onData hooks
  5. computation -> run action
    - onBeforeAction (legacy: before) hooks
    - run action function
    - onAfterAction (legacy: after) hooks

- When the router or user stops a controller by calling "stop":
  1. stop computation
  2. run onStop hooks
  3. isStopped state is true

  - Once a controller has been stopped it cannot run again for now.