4297 - parse or-addresses from bridge descriptors

Updates parseBridgeDesc to read or-address line from bridge descriptors,
and adds a container class PortList

parseBridgeDesc adds parseORAddress which parses or-address lines.
Valid address:portspec are added to each Bridge object in a dictionary
of or-address:PortList key:values.

class PortList is a container class that represents the or-address
PORTSPEC field, which is a list of ports and port ranges.

The implementation contains an efficient representation of port-ranges,
implements __contains__ for single ports and port-ranges, and will
also squash or merge port ranges that intersect.

The getPort() function returns a single valid port (as defined by the
PORTSPEC line). Each subsequent call to getPort() will iterate over the
valid ports, so that BridgeDB may return a single 'bridge' line for
inclusion in torrc and uniformly distribute the available ports.

getConfigLine may be passed 'selectFromORAddresses=True',
which will return a valid config line from the set of addresses
and ports. Filtering for IPv6 or IPv4 addresses is supported,
if there are no matches in or-addresses BridgeDB will return
the primary ip:orport instead.

Also added is a generator 'getAllConfigLines()' which will return
every valid address:port (including expanding ranges of ports -
which may be a lot of output) combination a bridge supports, one
per line.
4297 - FilteredBridgeSplitter - sorting bridges

The FilteredBridgeSplitter sorts bridges into subrings. The subrings
are defined by filter functions. For example, to filter bridges by
ORport > 9000:

def filterBridgesOver9000(bridge):
    if bridge.orport > 9000: return True

Example in context:

d = FilteredBridgeSplitter(key)
d.addRing(BridgeRing, 'Bridges with ORPort > 9000',
		filterBridgesOver9000)

When d.insert(bridge) is called, bridges will be inserted into all
subrings whose filter function returns True.
4297 - IPBasedDistributor learns to sort bridges

IPBasedDistributor now uses the FilteredBridgeSplitter to sort
bridges into subrings based on the address class of the Bridges'
ip(s) (including addresses parsed from the new or-address spec).
4297 - Add ipv6 keyword to EmailBasedDistributor

Updates the EmailBasedDistributor to support 'ipv6' keyword
in the subject or mail body
4297 - add Tests for BridgeDB IPv6 upgrades

Test descriptor file parsing, or-address, and mixed address class
(IPv4 and IPv6) or-addresses.
Tests for IPBasedDistributor and FilteredBridgeSplitter
4297 - Update BridgeDB's front-end Server.py

Front-end's to the HTTPS and email distributors now make use
of the address class filtering available in IPBasedDistributor
4297 - Add dependencies to setup.py

'python setup.py install' will now download and install BridgeDB's
dependencies too.
4297 - Warn about bridge pools + dynamic filtering

If using dynamic bridge filtering, the IPBasedDistributor must
be suppled wth a filtering function that will select the correct pool
for the requesting IP.

The filter could be implemented in a similar fashion as the existing
approach, which is to map the requesting ip address to an
area and assign then map the areas to pools of bridges.

An alternate approach would define bridge pools by a set of
corresponding country codes. The pools may either be of roughly equal
size to simplify bridge assignment, or weighted by the aggregate bridge
users from those countries.

Presently, BridgeDB does neither. There are very few IPv6 bridges, so
bypassing bridge clustering should be OK for the short term.

Deliverables for Sponsor E require that BridgeDB be able to reassign
blocked bridges to other countries; the extensions to BridgeDB required
to implement this policy will replace the current clusters with bridge
pools that correspond to geographic regions and address the current
filter limitations.
4297 - ipv6 uniformMap

Adds an ipv6-comptabile uniform mapper.
4297 - Exception Oddities

Some versions (tested with 2.6.6) of Python exhibit odd exception
handling behavior; this fix corrects an issue where the parent
class exception handler was catching exceptions meant for a
subclassed exception handler
4297 - reduce warning severity for ratelimiting

Drop to INFO, because these are not WARN