Add support for timeouts.

Timeouts are important at all levels of the stack. Though rare and
hopefully improbable it's still possible there may be a timeout while
connecting to DMS. In this case we want to make sure any clients are
protected from being blocked.