Chrome extension: Detect when access is denied

... during the deployment process, and redirect
the user to a page explaining the problem,
showing how to grant the "Allow access to file URIs"
permission to the extension.

Fixes #1663.
Warn on various deployment problems

... instead of failing silently.

 * When trying to deploy over the file:/// protocol
 * When trying to deploy over a PDF file, withouth PDF.js

Fixes #1650.
Use isAllowFileSchemeAccess
use triple equals for strict equality in JavaScript.
Extract the injectIntoPDF() method
Style the Chrome Extension help page
Remove the note about local PDF documents

It was ambiguous and we will have other methods in place to catch
the case where a non pdf file is opened locally.
Refact long method.
Move local file error into help document

This keeps the two error cases consistent.
Add a bind polyfil for PhantomJS
Add module for persisting tab state
Add module for dealing with tab state
Add new module for managing the browser action button
Extract the sidebar injection into a module
Create a module to wire up the extension components
Add a karma config file for the Chrome extension
Use the new HypothesisChromeExtension
Fix chrome.tab event listener arguments
Fix TabStore to ensure that an object is always loaded
Fix background Chrome extension script

It now correctly implements the HypothesisChromeExtension API.