plumbing: Turn log-firehose into a pubsub server.

There are at least two sinks for log messages:

1. The dashboard.
2. Longer-term storage of ArchiveBot log messages.

(1) exists; (2) does not.  I don't really want to build (2) myself, so I
need to provide some way for people to get the messages.  ZeroMQ pubsub
seems to do pretty well.
doc: Add ZeroMQ 4.0.5 to backend requirements.

I'm not actually sure of the best way to get ZeroMQ, so I've left it
out.  Ubuntu Utopic seems to still be on ZeroMQ 2.2; other systems are
on 4.0.5.  (For my development system, I just built ZeroMQ 4.0.5 from
the tarball.)  It'd be nice to have e.g. a PPA to point to.
test: Add firehose to test harness; update dashboard runner.
Fix typo in /js/chartbeat.js
bot: Make !a operate in no-offsite-links by default.

A major job bloating factor is offsite links and their associated page
requisites.  This extra fetch work and pipeline load should be a
conscious decision, not the default.

It would be cleaner to have --offsite-links write "offsite_links" into
the job record, but doing that would require a pipeline upgrade.  This
doesn't.
Revert "bot: Make !a operate in no-offsite-links by default."

This reverts commit be4450870472dde7ed966a279d18067f83b7b299.

Disabling offsite links by default does work, but it also means a casual
!a misses things like linked full-size images.  This is likely not the
expected behavior.
viewer: Fix no search results message.
viewer: Add basic CSS.
plumbing: Remove unused ia-list utility.

The viewer code does this job much better.
viewer: Switch over to SQLAlchemy
viewer: Add audit for absolutly no WARC files.

Re: ArchiveTeam/ArchiveBot#129
viewer: Fetch the JSON files.

Closes ArchiveTeam/ArchiveBot#128
viewer: Prevent populate() running multiple times.
viewer: Handle case where JSON is empty/corrupt file.
viewer: Handle case where spaces are in the filename
pipeline: Introduce Ignoracle, a home for ignore logic.  #104.

Ignoracle implements the placeholders discussed in #104 and gives us a
way to add correctness and performance tests to ignore code.

Ignoracle discards eager compilation.  Eager compilation adds
complexities with placeholders that I'd rather not deal with until e.g.
we know that we can't rely on Python's regex cache.
pipeline: Add a helper to feed url_info to Ignoracles.  #104.
pipeline: primary_host -> primary_netloc.  #104.

Python's urllib.parse.urlparse returns the network location (e.g. auth,
host, and port), not just the host.  I think it's easier to go with the
flow, so I've renamed primary_host to better reflect what it's really
matching on.
pipeline: Use Ignoracle in wpull hooks.  #104.
db: Add an ignore set to restrict !a *.tumblr.com to the target.  #104.

(This is the sort of thing that #104 is useful for.)