squash! Add Bridges.is_valid_ip doctests to b.p.addr.isValidIP docstring.
Rename IBridgeRequest → IRequestBridges. It's cuter.
Add bridgedb.interfaces module which simply collects all interfaces.
Deprecate bridgedb.Bridges.is_valid_fingerprint().

 * MOVE bridgedb.Bridges.is_valid_fingerprint() to
   bridgedb.test.deprecated module for regression testing.
 * REMOVE bridgedb.Bridges.toHex().
 * REMOVE bridgedb.Bridges.fromHex().
 * REMOVE bridgedb.Bridges.HEX_FP_LEN.
 * ADD bridgedb.parse.fingerprint module. This now contain equivalent
   functionality to the above removed/moved objects.
 * ADD monkeypatcher code for all the above removed/moved code to
   bridgedb.test.test_Tests suite for regression testing.
Remove bridgedb.Bridges.HEX_DIGEST_LEN; it's completely unused.
Add note that bridgedb.Bridges.ID_LEN isn't used.

It's only occurence is in one commented out line of code, in
bridgedb.Storage:
L414: #        bridgedb.Bridges.chopString(v, bridgedb.Bridges.ID_LEN)))
fixup! Deprecate bridgedb.Bridges.is_valid_fingerprint().
fixup! fixup! Deprecate bridgedb.Bridges.is_valid_fingerprint().
fixup! fixup! fixup! Deprecate bridgedb.Bridges.is_valid_fingerprint().
Move old b.Bridges.is_valid_ip() doctest to b.p.addr.isValidIP().
Make `isValidIP()` backwards compatible with deprecated `is_valid_ip()`.

The old `bridgedb.Bridges.is_valid_ip()` function expected a single
string parameter, and would return a boolean. The new
`bridgedb.parse.addr.isValidIP()` function expected an
`ipaddr.IPAddress` as a parameter.

 * CHANGE `bridgedb.parse.addr.isValidIP()` to convert any strings which
   it receives as arguments into `ipaddr.IPAddress`s, which makes it
   backwards compatible with the (deprecated)
   `bridgedb.Bridges.is_valid_ip()` function.
fixup! Make `isValidIP()` backwards compatible with deprecated `is_valid_ip()`.
Rip out `BridgeHolder.assignmentsArePersistent()`, it's never used.

Also, for what it's worth: the "proper" way to implement this would have
been as an @property.
Support requiring distribution of bridges with the "Running" flag.

 * CHANGE bridgedb.Bridges.BridgeRingParameters class to support using
   the FORCE_FLAGS config setting to require some N of bridges
   distributed to have the "Running" flag.
Fix old Tests.py; networkstatus.parseALine returns a string.

 * CHANGE test_regressionsNewCode_IPBridgeDistTests_testDistWithFilterIP4()
   and test_regressionsNewCode_IPBridgeDistTests_testDistWithFilterIP6() to
   convert the string returned from networkstatus.parseALine into an
   ipaddr.IPAddress.
Add initial IDistribute interface specification for a distributor.

 * ADD new module, `bridgedb.distribute`.
 * ADD new `bridgedb.distribute.IDistribute` interface specification.
Add basic implementation of the IDistribute interface.

 * ADD new class `bridgedb.distribute.Distributor` which is an extremely
   generic implementation of the IDistribute interface.
Remove old bridgedb.Dist.Distributor class.

 * REMOVE `bridgedb.Dist.Distributor`.
   - The generic implementation of the `bridgedb.distribute.IDistribute`
   interface is now at `bridgedb.distribute.Distributor`.
Move old `b.Dist.Distributor` doctest to `b.Dist.IPBasedDistributor`.

This doctest didn't really test the generic implementation anyway, it
specifically tests the IPBasedDistributor's use of generic Distributor
methods.
Add IHashring interface specification.

 * ADD new `bridgedb.hashring` module.
 * ADD new interface specification, `bridgedb.hashring.IHashring` which
   is a first draft specification for how a hashring should behave when
   implemented.