utils_ctl.py: implement verbose
Implement MacOS browser
main_macos.py: implement main for MacOS
utils_net.py: isconnected(): fix exception type check
config.py: switch to version 2 of the test

Now that I've deployed the new code on all M-Lab servers I
can switch new clients to use version 2 by default.
Neubot/0.4.12-rc3 released
Pass to connection_made() connected or listening endpoint

When we are connecting, it is useful to know the domain name
we're connected to.  In particular, because now our connect
accepts a space-separated list of domains to try.

When we are listening, it may be useful to know the specific
listening endpoint that was contacted.
StreamHandler: connection_made(): stop providing default rtt

Instead of providing a default rtt of zero, for when it was
not supplied, adjust Listener to pass connection_made() zero
in the only case when rtt does not make sense.
http/client.py: compute host header when we know real endpoint

Now it is possible to pass connect() a list of endpoints to
connect() to.  As a consequence, we cannot compute host header
until we know the one in the list that succeeded.  Otherwise,
the URI is invalid because it contains all the addresses in
the list, e.g.::

    http://master.neubot.org master2.neubot.org:9773/rendezvous

As a bonus, the host header now is always computed, regardless
that connect_uri is used.
Pass runner_rendezvous address to connect to, not URI

I want to specify a list of addresses to try for rendezvous, so I
need to pass runner_rendezvous the address (list) not an URI.

This has no effect on the request that is sent on the wire, and,
in particular, the request path is still '/rendezvous', as it
ought to be.
config.py: add fallback master server

This makes our infrastructure more robust, since Neubot will
work even if the main master server is down.  In this case,
simply the fallback master server will be used.
Merge code that allow to specify a list of master servers

Building on top of the recent connect() diff, this set of patches
allows to specify a list of master servers.  In turn, connect() will
try the whole list before giving up.  This allows for more robustness,
because the secondary master node may be reachable if the primary
one is unreachable, e.g.  due to network problems.
add Win32/openssl.exe: OpenSSL 1.0.1c compiled with MinGW

The executable depends on advapi32.dll, gdi32.dll, kernel32.dll,
msvcrt.dll, user32.dll and ws2_32.dll only.
Win32/setup.py: distribute also openssl.exe
add Win32/LICENSE.OpenSSL.txt: add a copy of OpenSSL license
updater_runner.py: wait 1800 seconds between each check
MacOS: uninstall.sh: remember to zap notifier plist

Noticed while helping Lee Sachs on the public mailing list.
Prefer IPv4 unless the user forces IPv6

As discussed with Tiziana:

  At the moment the default choice is to let the operating
  system decide.  I think I will only be able to test the
  behavior of Ubuntu due to limited IPv6 availability here
  at PoliTO.  So, I cannot comment on what MacOSX and Windows
  would do, if both IPv4 and IPv6 are available.

  In light of that, I think it's wiser to prefer IPv4 by
  default and inform the user that, if IPv6 is available,
  she can configure Neubot to switch to it.  This shouldn't
  hurt much less-tech-savvy Neubot users, but should allow
  curious folks to experiment.

So, this commit makes IPv4 the default choice.  But the user
can force Neubot to prefer IPv6.
IPv6: deal with IPv4-mapped IPv4-compatible IPv6 addresses
database: add test_version column for speedtest, bittorrent

This should help who analyzes the data to easily understand what
was the methodology used to collect the data.

Come to my mind after an email from Tiziana regarding changes
in the methodology in the last 7 months.