Remove top-level state dependencies

Introduces a root controller to isolate top-level states previously bootstrapped in the `.run()` method.

This increases testability, removes unnecessary dependencies in tests (e.g. the reliance on `$window.addEventListener`) and should therefore increase clarity.

Note, top-level child states should now inherit `root.index` to include the persistent parts of the app (header, footer etc.). This is best done by simply adding a `parent: 'root.index'` property to the state.

Closes item:363.