Cancel tasks on timeout

Deferred.cancel() swallows AlreadyCalled exceptions.