nmbug.js: Cleanup dialog-polyfill injection to avoid duplicates

The bookmarklet used to load these each time it was launched, which
caused duplicate entries if you opened and closed the bookmarklet
multiple times on the same page.
nmbug.js: Add a 'frame' argument to nmbug.show

It defaults to the root window, but handlers can override it if it
makes sense to launch the dialog in a particular frame.  JavaScript
objects are also scoped within a given window, so we need to attach
the dialog polyfill scripts to the window that will be getting the
dialog, and use frame.dialogPolyfill to register it.
nmbug.js: Third attempt at robustly loading the dialog polyfill

It seems like onload is firing after the browser finishes *fetching*
the target, but before it finishes *parsing* the target.  That's
giving me ReferenceErrors for dialogPolyfill.  This new approach
attacks that directly, and just spins until dialogPolyfill has been
setup (with a bonus wait before using it, just for good measure).  Not
very pretty, but more robust ;).

I also simplified the check that avoids reloading the polyfills.
Instead of looking at the document's head, I just check for
dialogPolyfill.  If we've got native dialogs or dialogPolyfill, don't
bother (re)loading the polyfill scripts.
nmbug.js: Insert the dialog at the beginning of body

Instead of at the end.  I haven't tested this carefully, but in my
vague memories it seemed to do a better job of positioning the dialog
near the top of the frame.
nmhive.py: Add --host and --port options

Time to polish this up a bit now that it works in testing ;).
README.rst: Add server-setup instructions

It's no fun when projects don't tell you how to use them ;).
README.rst: Mention NMBGIT and NMBPREFIX

I'm also using my ported-to-Python version of nmbug [1], but that will
hopefully land soon, so I'm not documenting it yet.

[1]: http://thread.gmane.org/gmane.mail.notmuch.general/19007
     id:e630b6763e9d0771718afee41ea15b29bb4a1de8.1409935538.git.wking@tremily.us
nmhive.py: Return 400 errors for data-less POSTs

Avoid:

  Traceback (most recent call last):
    File "/.../flask/app.py", line 1836, in __call__
      return self.wsgi_app(environ, start_response)
    File "/.../flask/app.py", line 1820, in wsgi_app
      response = self.make_response(self.handle_exception(e))
    File "/.../flask/app.py", line 1403, in handle_exception
      reraise(exc_type, exc_value, tb)
    File "/.../flask/_compat.py", line 33, in reraise
      raise value
    File "/.../flask/app.py", line 1817, in wsgi_app
      response = self.full_dispatch_request()
    File "/.../flask/app.py", line 1477, in full_dispatch_request
      rv = self.handle_user_exception(e)
    File "/.../flask/app.py", line 1381, in handle_user_exception
      reraise(exc_type, exc_value, tb)
    File "/.../flask/_compat.py", line 33, in reraise
      raise value
    File "/.../flask/app.py", line 1475, in full_dispatch_request
      rv = self.dispatch_request()
    File "/.../flask/app.py", line 1461, in dispatch_request
      return self.view_functions[rule.endpoint](**req.view_args)
    File "/.../nmhive.py", line 59, in message_id_tags
      for change in changes:
  TypeError: 'NoneType' object is not iterable
nmhive.py: Add --debug option

I'd removed a hardcoded 'app.debug = True' in bdbfab1f (nmhive.py: Use
notmuch behind GET /tags, 2014-09-21) because it conflicted with a
global, read/write lock.  However, in a98096f1 (nmhive.py: Use
per-request database connections, 2014-09-21) I dropped the global
lock, so enabling debuging is feasible again.
README.rst: Document the nmhive.py endpoints
nmbug.js: List tags as <a> in a <p> instead of as <li> in a <ul>

This is more compact, since there are currently 27 tags in notmuch's
nmbug list ;).  I also switched to more generic variable names
(tag_list, tag, and element) so that future tag-name changes are less
invasive.
nmbug.js: Add 10em left/right margins to the dialog

This avoids overlapping with Gmane's left-side navigation elements
(Home, Reading, Searching, ...).
static/article.png: Add a screen-shot with an article.gmane.org/... page

Adjust the .gitignore to just ignore the bower-installed
dialog-polyfill, since we do want to version this screenshot.
index.html: Add usage instructions

And show the screenshot added by the previous commit.