Devoncarew launch refactor

Refactored our launch framework. This will enable us to unify the 'run' and 'deploy' code. So deploying will be a similar process to running, with different handlers to actually perform the work. This is in support of having pre-flight behavior, like running pub or verifying that pub doesn't need to run. Also, we'll be able to use this code to deploy web apps to mobile. Up next are:

- moving the deploy code to use this codebase
- adding a pub pre-flight check for dart apps
- deploying web apps to mobile

@keertip