Re-indent makelinks.sh and fix shebang

The script relies on bash features (arrays), so make the shebang line
reflect that.
Fix makelinks.sh to deal with scripts in subdirs
Add module scripts that injected into the real page

There are (at least) three main security contexts in a Chrome extension:

1) The extension page/script context. There is only ever one of these.
   It has almost no direct access to the user's web pages.

2) Content scripts. These share a DOM with a real page, but they have an
   isolated script execution context.

3) User pages. The real deal: these share execution environment with the
   page. This is the closest you get to a traditional bookmarklet.

This commit adds a proof of concept that injects code from an extension
into the last of these three contexts.

Major issues:

- We're already using Chrome-specific functionality in the
  supposedly-client-agnostic extension.js

- Do we even want to do this? Sharing execution context with the page is
  the cause of many of the most annoying problems of bookmarklets. It
  may be that we can execute much of what we need in content scripts.
  This essentially relies on whether content scripts can interact with
  the user and the DOM to the same extent as a normal script tag in a
  page.

- All communication between content scripts and page execution context
  has to be done through the DOM (most simply, through
  window.postMessage, as here).
Make the Chrome extension run on any page.