Clarify warning message.
Endpoint returns False when thread still alive.
Clarify asserts.
LAN/WAN detection cleanup.

- Dispersy._local_interfaces contains a list with all available
  interfaces, including their subnet mask

- Votes for our WAN address that originate from within our LAN are
  ignored.  A vote originates from within our LAN when the origin
  sock_addr matches any of Dispersy._local_interfaces, taking into
  account the subnet mask of each interface.

- Dispersy.estimate_lan_and_wan_addresses has been simplified.  It now
  recognises the inability to determine the WAN address of someone who
  is on its LAN address (or the LAN address of someone who is on its WAN
  address).

- Candidate.lan_address and Candidate.wan_address is now allowed to
  be (0.0.0.0, 0).  Previously the value would always be set to -some-
  address, sometimes resulting in incorrect addresses.

- Candidate.sock_addr is always used when sending packets to a
  Candidate.  The Candidate.get_destination_address method is
  deprecated.
WAN/LAN specific unit tests.
Minor comment and debug output changes.
Write summary file after test.
Callback identifiers should be unicode strings.
Obtain (possibly) new interfaces when reassessing.
Additional unit test code.
Do not introduce incomplete candidates.

Since we are only able to assess either the LAN or the WAN address of a
candidate, it is possible that the other address remains 0.0.0.0:0 (if
that is what the candidate reported).  These candidates should not
introduced
A Candidate.wan_address may overlap with ours.

it is possible that the WAN address that someone claims to have is
correct, while the WAN address that we believe we have is not.  it is
not a problem to have candidates with the same WAN address as us.
Add IP and connection type info to logger.
Code cleanup.
Merge remote-tracking branch 'remotes/upstream/devel' into WAN-LAN-fixes
Merge remote-tracking branch 'remotes/upstream/devel' into WAN-LAN-fixes

Conflicts:
	dispersy.py
Allow parsing of a single file.
Unit tests should also work on slow machines.
Fixes _watchdog start/stop.

Registering _watchdog from the Dispersy constructor allows it to call
database commit before Dispersy.start() is called if the user decides to
wait a minute before 'starting' Dispersy.

_watchdog should be registered and unregistered from Dispersy.start()
and Dispersy.stop(), respectively.
Dynamic callback id's.

Fixes conflicting callback id's when running multiple Dispersy instances
on the same Callback.  This problem could occur since the singletons
were removed and the start/stop was introduced.