Replace Timeout.timeout with event machine timer timeout

* Also add better error-case handling for Task#promise_stop

Signed-off-by: Matthew Sykes <matthew.sykes@gmail.com>