Refactor captive portal test to use twisted.names and twisted.web
Currently the captive portal test is implemented using dnspython and urllib. This means that it does not follow the design of the other tests. Moreover, it is structure in a way that is not uniform to the rest of the tests. I would propose splitting it up as follows:
each vendor test should be it's own function that is prefixed with test_vendor_ This is what is currently in run_vendor_tests and self.run_vendor_dns_tests.
The tests should not be grouped by protocol but by vendor. This means that, for example, we would have:
test_vendor_microsoft_captive_portal test_vendor_apple_captive_portal test_vendor_w3_captive_portal