Devoncarew deploy web

This:
- adds the ability to run a dart chrome app locally on a non-dartium chrome
- adds the ability to deploy a dart chrome app to a remote device
- some preliminary work to 'deploy' a web app (dart or non-dart) to a device. Currently this displays a message to the user with instructions to them about how to connect to our web server from their device.

And more specifically:
- create a common `resolvePath` method
- change the deploy action to go through our launch framework; it works very similar to run now
- add launch handlers for deploying chrome apps and deploying web apps. The web app handler displays a message to the user about how to set up their device. The chrome app handler delegates back to the original deploy dialog.
- add a dart chrome app launch participant which copies the `/packages` directory contents down to `<dir>/packages` as part of the launch process. Also, compile the dart code to JS iff the JS is not up to date wrt to the dart source code, and the launch target is not dartium.
- add a default favicon if none is provided by the web app
- add a way to get the localhost IP, so we can display it (and ther server's port) to the user
- make the dialog help text selectable, so users can copy the help text out (this can now contain urls)

@keertip, @dinhviethoa

Some future work:
- add a dart chrome app sample
- work on the adb code so that we can set up a reverse proxy back to our web server automatically. We can then remote the explanation dialogs on web app deploy
I need to return the address of the machine from the POV of another device (the mobile phone). 127.0.0.1 would only work for local connections :)

That additional permission is needed for the `chrome.system.network.getNetworkInterfaces` call. 

Once we have the code to set up a reverse proxy from the phone to the host laptop, we won't need to display an externally addressable address.