Simpler timeouts more idiomatic Twisted timeouts.

The previous implementation created 3 extra deferreds for every timeout call.  the one created by using inlineCallbacks, another by using DeferredList and the explicitly extra created timeoutD.  This implementation of timeouts creates no extra deferreds if func returns a deferred and one deferred if func does not.