Add `key` parameter to bridgedb.distribute.Distributor.__init__().
Add XXX note about sending BridgeRequest object to Distributor.

If we assume that the Distributor can be run separately, then we should
assume that the email servers will send their EmailBasedDistributor a
`bridgedb.bridgerequest.BridgeRequest` object describing the incoming
request. It should be the Distributor's job to transform this request,
if necessary, into something which can talk to the DatabaseManager (see
comment:1 on #12029). [0] That is, the Distributor should be capable of
transforming BridgeRequests it receives into JSON.

[0]: https://trac.torproject.org/projects/tor/ticket/12029#comment:1
Add formatRequestAsJSON() method to Distributor.

Distributors should format their underlying implementers of
`bridgedb.bridgerequest.IRequestBridges` into JSON, so that the
Distributor can send this serialized request to the DatabaseManager and
await an answer from the DatabaseManager (which hopefully will contain
bridges for the Distributor to then hand back to the client who made the
original request).

 * ADD specification for `formatRequestAsJSON()` method to `IDistribute`
   interface specification.

 * ADD `bridgedb.distribute.Distributor.formatRequestAsJSON()` generic
   implementation. This method merely asks the underlying
   `IRequestBridges` object to serialize itself via the
   `IRequestBridges.toJSON()` method.
Add fromJSON() and toJSON() methods to IRequestBridges and BridgeRequestBase.

 * ADD JSON serialization method `toJSON()` to
   `bridgedb.bridgerequest.IRequestBridges` interface specification and
   `bridgedb.bridgerequest.BridgeRequest` generic class implementation.

 * ADD deserialization from JSON method, `fromJSON()`, to
   `bridgedb.bridgerequest.IRequestBridges` interface specification and
   `bridgedb.bridgerequest.BridgeRequest` generic class implementation.