Add rudimentary Timeout class

This is just to get the tests passing, it doesn't change behavior

You can now specify Timeout values with urlopen(timeout=util.Timeout(request=20))
in addition to the usual float/int ways of specifying it.

Also add a test case for the old way of specifying a timeout
revert unnecessary change
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.
Update PR with code review feedback

Timeouts are initialized to a sentinel value to allow user to specify
None as the timeout value
Clarify documentation of util.Timeout
Add more tests around util.Timeout

Also discard negative values
Add an EnhancedHTTPSConnection with connect timeout support
Add util.Timeout.__str__
Add better test coverage

I am unsure how to test _tunnel(). Fixes some bugs
uncovered by more robust test coverage
initial work on porting start/stop to the Timeout class
fix the tests
source_address not supported in python2.6

thanks @pasha-r
remove moved comment
Add better test coverage

Add better validation in util.py
Convert get_request_timeout and get_connect_timeout to properties,
per the Url class in the same file
Python 2.6 compatibility
Use coveragerc properly
Timeout.total is a number or None

This simplifies the comparison logic.

Connect timeouts now follow the below table:

connect = int, total = None: connect is int
connect = int, total = int: connect is minimum

connect = None, total = int: connect is total
connect = None, total = None: connect is None

connect = object, total = int: connect is total
connect = object, total = None: connect is object
Fix test coverage for Python 3
Set the legacy timeout on the request and the connect

It looks like the timeout is set on the socket which means it applies equally to
the request and the connect calls, make the code reflect this behavior
Refactor connection objects into connection.py

Update the tests and objects to point to the new place