Ignore any downloaded Tor exit-list files.
Add utility bridgedb.runner.find().

 * ADD utility for finding executables by name, uses Twisted's procutils,
   which functions like doing ``which nameofprogram``. This is used to find
   additional scripts, like BridgeDB's ``get-tor-exits`` script.
Add t.i.process.protocols for handling Tor exit-list download.

 * ADD bridgedb.proxy module for handling open proxy lists.

 * ADD bridgedb.proxy.ExitListProtocol class for asyncronously processing the
   results read from an HTTPS connection to a remote TorBulkExitList.py.

 * ADD bridgedb.proxy.ProxySet for storing a MutableSet of proxy addresses,
   which functions better than bridgedb.Main.ProxyCatagory because it will not
   allow duplicates to be stored. It also enables us to add its methods as
   callbacks on deferreds, meansing that the ExitListProtocol can callback its
   protocol's deferred with a ProxySet.addExitRelays(), which automatically
   parses and adds the IP:port pairs as they are received from the wire, and
   adds them to the ProxySet's MutableSet if they do not already exist.

The ProxySet class can also store whether an IP:port pair is a known Tor exit
relay (with the ``ProxySet.addExitRelay`` method mentioned above), this is
*most* of the fix for #4771.

 * FIXES #4771: bridgedb's list of tor exit relays is down since bulk exit
   list is down.

 * ADD several IP address parsers/validators to bridgedb/parse/__init__.py,
   because I wasn't sure yet if they should be their own module. These checks
   are improved versions of the old IP address checks in bridgedb.Bridges,
   because they do not use regexes, and also check that IPv6 addresses are not
   site-local.