Implement retry logic

- The total number of retries for any type of error will be the maximum of the
specified value for the retry type, and the specified total number of retries.
So, if you specify total=5 and connect=3, and there are 4 retries, we will not
raise a MaxRetryError. Alternatively, if you specify total=3 and connect=5, we
will also not raise a MaxRetryError. Please see the tests for a full
description of the functionality of the class.

- Adds a new successful_retry handler to dummyserver/handlers.py which throws
a 418 the first time you call it and a 200 the second time. It uses
a class-level defaultdict to store state; I'm not sure how else to implement
this.

- Adds docs for new features

- Splits out util.py into submodules - I need to know what you want to do here because as written it would change from `urllib3.util.Timeout` into `urllib3.util.timeout.Timeout` which is not good.

- I believe there are some API changes here.
    - some subclasses of httplib.HTTPException can actually be raised as connection errors because they imply the request never actually got sent to the server.
    - urlopen previously would retry on read timeouts, which violated the urlopen contract (as I understood it) of only retrying things that couldn't possibly be side effecting. this code does not retry read timeouts by default.

I am also testing this in two new environments - in the office which places my IP on 10.* subnet and I think has weird/different behavior when connecting to TARPIT_HOST than do standard wifi networks, and without an Internet connection, in which case a bunch of tests fail. Also, it's difficult to test some of these exceptional cases because the errors raised rely on the network stack, which (I think) is why the tests are failing on the branch. I'm still looking into it.

Either way I am losing some confidence in the connection timeout tests; getting a network to reliably generate ECONNREFUSED, or not generate it and tie up a connection, is tricky, unless we want to go down a path like this: http://bugs.python.org/file26890/test_timeout.patch

Ports in find_unused_port from test_support! This will be super useful in the
future.
Rephrasing comments.
fix issues from looking at diff
Fixing rebase-related bugs.
More rebase fixen.
Move copypasta to its own module, and bump up @timed limits for pypy.
Oops missing copypasta module.
Tweaks.
More rebase-related fixes. I hate rebasing.
Progress: Playing around with retries redesign, tests failing though.
More cleanup and rephrasing. Tests still fail.
Messing with defaults some more.
Fixed infinite loop tests, still more to fix.
More cleanup, though status_forcelist tests are still borken?
Tests pass, still need more coverage.
Tests pass.
Py3.
Docs.
Retry.redirects -> Retry.redirect
Omgomg found another place where I borked a rebase, PAH.