conn: fix memory leak when using long timeouts
A timer will only be garbage collected once it has fired, if a call
returns before the timeout is reached then it will not be garbage
collected, leading to potentially many timers on the heap.
fixes #851