Persistent storage.

This uses a horrible hack (that may have to continue indefinitely):
Don't write directly to the html5 filesystem storage. Instead, write to
in-memory storage, which has a more fully-featured implementation.

Then, hook any write changes (write/mkdir/remove) to copy the change to
persistent storage. Then copy the data from the persistent storage to
the in-memory storage at startup.

There are a few wrinkles of course: when using the module as a MIMEtype
handler, the origin is not the extension, so we have to request
filesystem storage. Until the user accepts or declines to store the
data, we have to queue up write requests.

Another related annoyance: loading the game via left-click or
right-click (context menu) will have different origins, and therefor
storage.

That all said, I'm glad this finally works. :)
context_menu.html uses a URL query parameter.

This allows you to reload the page, bookmark it, etc.