Add an EnhancedHTTPConnection class

We need to override the default connect() method so we can set our own connect
timeout. Also adds two new error classes, ConnectTimeoutError and
RequestTimeoutError

Adds a bunch of tests that total, request and connect timeouts do what they are
expected to do.