Check for Marketplace update, offer to download it if one is available (bug 1097430)

 * [ ] Merge zamboni side for the packaged app: mozilla/zamboni#2740
 * [x] Implement `applyUpdate()` in direct installer
 * [x] Style the banner and its buttons following mockups
 * [x] Map banner buttons, and change the content when the user chooses "download"
 * [x] Unit Tests

To test locally, you need to emulate the fact that you've got a Marketplace package installed. It can be done on Firefox Desktop while serving fireplace with gulp. Assuming you are serving Marketplace from `http://localhost:8675`:
- Build a dummy packaged app, put it in `src/app.zip`
- Build a dummy manifest and make it reference the app by setting  `"package_path": "http://localhost:8675/app.zip"`, then put it in `src/packaged.webapp`
- Open `http://localhost:8675` in your browser, open the console and install the app with `navigator.mozApps.installPackage('http://localhost:8675/packaged.webapp')`
- Verify with `navigator.getInstalled()` that the install worked, the package and manifest need to be valid, the result of `installPackage()` should give you hints if it failed
- Reload `http://localhost:8675` - It should check for update in the background, but not find any yet
- Bump version in manifest - reload `http://localhost:8675`, now it should offer you to upgrade
- Clicking download should download the app and update it to the new version
- If you reload `http://localhost:8675` should no longer offer you the update
mmm, when I wrote this I specifically wanted `app://` for the packaged app, but this is actually wrong and you are right.

The problem is, we can't use `navigator.mozApps.getSelf()` because that doesn't work from inside the iframe (*). 

So we need to guess the actual manifest URL used. I *think* `https://marketplace.firefox.com/packaged.webapp` will work because this is the manifest for the current iframed app, but it will become the manifest for the packaged app when we switch to it. And I just need to make it work for dev/stage as well.


(*) Might need to retest this just to be sure.