Index documents asynchronously.

This lets Rummager handle the case where the search engine is not
available or a request times out, rather than falling over with an
error and leaving the requesting application to handle the failure.

This is a first pass at getting something that works, so it's not very
pretty and doesn't have good test coverage.

For the purposes of testing, for now, we're disabling job queueing and
making all jobs happen synchronously. This is in lieu of making the
tests aware of how the queues work.
Base the queue's namespace on the environment.

More than anything else, this is to avoid any overspill between
development and testing. The tests should all be unable to write to
the queue, but just in case, this shields us from accidentally trying
to post test data and getting IndexNotFound errors.

Hat tip to @jamiecobbett for the idea.
Put queueing behind a feature flag.

Enabling this in development by default would break people's machines
unless they knew to fire up a queue worker. We can hide this behind an
environment variable and overwrite the initialiser on deployment.
Respond with a 202 response when queueing enabled.

This code more accurately reflects the fact that the request has been
accepted for processing, but hasn't yet succeeded (and might fail).