Add support for connect timeouts

Modifies the timeout interface to also accept a tuple (connect, read) which
would be used to set individual connect and read timeouts for Requests. Adds
Advanced documentation explaining the interface and providing guidance for
timeout values.
So I agree 100% that the fact this is a breaking change is important. Sub-classing `ConnectionError` is definitely the way to have backwards compatibility, but I'm not confident that all `Timeout` errors should inherit from it. `ConnectTimeout` makes perfect sense. A read timeout is different to me. There's no error in the connection itself. We were able to create it and maintain it. We are the ones terminating it arbitrarily because the user asked us to. There's no "error" there. Does that make sense? It's purely semantics, and I'm not entirely against having `Timeout` inherit from `ConnectionError`, I just don't know if it's the most correct way to do it.