Switch to bleeding-edge redis-py.

Andy McCurdy has merged a large number of changes to redis-py's pubsub
implementation.  Of particular interest is pubsub.run_in_thread(), which
subscribes to a pubsub channel on a separate thread.  In released
versions of redis-py, doing this is very painful.

These changes are scheduled for redis-py 2.10.0, which is not yet
released.  Hence this commit.

We also drag in hiredis because redis-py edge + native Python parser
gets into infinite loops on sudden connection failure in the pubsub
client.  With hiredis, a redis.exceptions.ConnectionError is raised,
which is much easier to work with.
Use per-job pubsub channel.
A webapp for ArchiveBot integration testing.
When job settings change, publish a notification.
A more Pythonic way of raising exceptions-from-exceptions.
Wrap connect/disconnect in methods.
Introduce and wire in the settings listener.

This commit also moves abort_requested to the settings module, because
ce91de3039af33008a312c7b14823cd6fd95d1ac turns it into something that
acts more like a setting.
Make !yahoo increment settings age by one.

The old mechanism used separate calls to modify delay, pagereq delay,
and concurrency.  This incremented the settings age by three.  Under the
listen-for-settings-changes model, this means we also publish three
update messages.  However, a !yahoo is conceptually one settings change.
Bump pipeline version.