So.... maybe this requires a little more thought. This may violate thread safety if the start time is stored on the object and the same Timeout object is used in multiple connections. We can copy.deepcopy the Timeout object around but that's is risky.

Storing start() etc on the timeout also makes the tests a little more complicated, you have to set up the timeout state before you can make assertions about the request timeout.