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.)
pipeline: Regex-escape URL and network location.  #104.
pipeline: Switch to templates for placeholders.  #104.

string.format() substitutes all occurrences of {token} with a token in
the formatting map.  Unfortunately, {m,} is also regex syntax for
"match m or more repetitions of preceding regex", and we use {3,} in a
global ignore.

Solution: Use a different delimiter.  Python's string templates look
like they give us enough power to do what we need to do, and they won't
clobber repetition ranges.

Unfortunately, we can't use the default $ delimiter, because $ is a
regex metacharacter.  %# seems sufficiently unlikely to appear in URLs.
pipeline: Top URL and level is in record_info, not url_info.  #104.
db: Remove trailing space in singletumblr ignore set.  #104.
Switch back to {primary_netloc} and {primary_url}.  #104.
Document {primary_url} and {primary_netloc}.  #104.
Bump pipeline version.  Closes #104.