Reparse descriptors in background thread on signal

Create temporary distributors and fill them with bridges then
overwrite the old distributors' rings with the rings from the
temporary distributors. Factor out distributor creation code.

Bug fix 5232
Add tests for SIGHUP and SIGUSR1 signals
Add unit tests for bridgedb.Storage
Return a database handle via generator

Define a new idiom for retrieving an instance of
bridgedb.Storage.Database

Use:
    with bridgedb.Storage.getDB() as db:
        db.<do stuff with the database>
Use the new idiom throughout code
More unit tests for Email Server
Handle previously unhandled exception when replying to mail
Rewrite database lock acquisition function

Restrict access to the database handle when multiple threads request
the ability to query. thanks to yawning
Open and convert the db, if necessary. Store DB filename for all.
Add useful output during startup integration test
Make sure leekspin created our descriptors
Bump leekspin to v0.1.3
Only update distributor's hashring if it's still active

TODO: shutdown the distributor in this situation
Use `email.message.Message` instead of `MimeWriter.MimeWriter`

`MimeWriter.MimeWriter` was deprecated in Python 2.3, now is a great
time for us to switch to the replacement.

Fixes #11370
Add TODO mentioning that we should be able to disable distributors

If we reparse our config and it tells us that a distributor, which
is currently running, should be disabled then we should be able to
shut it down.

Also wrap long lines.
Merge remote-tracking branch 'tpo-sysrqb/bug5232_adding_concurrent_processing_squashed_r1' into develop