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

**Screenshots:**
![Notification screenshot](https://cloud.githubusercontent.com/assets/187006/5230310/9c4035b2-7724-11e4-8824-f92acf82f158.png)
![After downloading the update](https://cloud.githubusercontent.com/assets/187006/5230316/b56a078e-7724-11e4-8e2b-5a24f0b03c6a.png)
![All notifications at once!](https://cloud.githubusercontent.com/assets/187006/5230311/9c40ef98-7724-11e4-8768-bb503e106187.png)

**TODO:**
 * [ ] 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
 * [x] Screenshots

**Test instructions:**
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`:
- Edit your `settings_local.js` to add `manifestURL: window.location.origin + '/packaged.webapp'`
- 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
`.closest('mkt-banner')` is a bit more readable. Any rationale behind the custom element?