Add env function to detect when running from a Chrome extension
Use Dropbox.js' Chrome extension auth driver when running in a Chrome extension

Chrome does not allow the app popup to redirect itself to dropbox.com
to complete the auth flow, so use Dropbox.js' built-in driver
which opens a tab to authenticate the user.
Initial commit of manifest and browser action for Chrome extension
Add .gitignore file for Chrome ext
Restructure app UI to support Chrome extension's background/popup page architecture

In Chrome, popups for browser action pages are unloaded whenever
the popup is dismissed.

With the previous structure where the app was initialized and all state
maintained in the popup HTML page, this meant that the passcards app was
being reloaded every time the browser action was used.

This commit restructures the app so that the bulk of the app
lives in a background page which can live whilst the popup
is not active.

When the popup is shown, the app's main component is rendered into
the DOM element in the popup.

 * Separate initialization of the app from rendering of the app's main
   view. In the Chrome extension the app is rendered into a different
   document than the background page where the app lives.

 * Remove several dependencies on the global 'document' object
   in components in favor of using the document that the component
   is currently mounted into.

 * Set up Dropbox OAuth receiver script for Chrome extension to handle
   Dropbox login.

 * Use key codes rather than KeyboardEvent.key string identifiers for
   compatibility with Chrome and Firefox
Add Makefile target to create a local .crx package for the Chrome extension
Add 'key' field to manifest from web-store version of extension

This gives the extension the same ID for local development as in the
published app on the Chrome Web Store
Exclude hidden files from zip archive when packaging extension
Chrome extension version bump
Initial work on an app <-> active tab connector for the Chrome extension
Avoid copying rpc.ts into addons/firefox/src before compiling main Firefox addon script

Instead reference rpc.ts using the normal require() path and then copy
rpc.js into the lib/ dir after the build completes and re-write the
require() in the generated main.js file to reference it.

This saves the need to modify paths of type definitions referenced
by rpc.ts before compiling it for use in the Firefox addon
Adapt to move of form field types from `page_access` to `forms`
Adapt the page worker script from the Firefox extension for use in the Chrome extension

 * Move page.ts to webui/ for sharing between extensions and build
   as part of the main app build.

 * When setting up the extension <-> page worker RPC,
   use a ChromeMessagePort in the Chrome extension.

With this commit, form collection and autofill now works in the Chrome
extension.
Add notes about the Chrome extension to the README file