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.
Let's stop and think about our exception heirarchy.

Currently this is a breaking change, because in situations where we previously would have thrown a `ConnectionError` we'll now throw a `ConnectTimeout`, which will not get caught. Should we be making the `Timeout` exception a subclass of `ConnectionError`? @sigmavirus24