Clean-up idle handler when leaving the open_host_idle()

An explicit yield back to the channel coroutine when the idle function
is still pending will leave it in the background, referencing objects
that may no longer exist. Make sure we remove it when
channel_open_host() is resumed.
Fix switching to TLS regression

The commit fcbbc248a8f885f9a9a6e7c47d7aae0c1ab3cd1b changed the way a
channel coroutine is exiting. In particular, it was going through the
coroutine main cleanup (finishing in main coroutine) while switching
to TLS is recycling the channel. That part of the code is a bit
difficult to grasp, but with this refactoring, I think it makes it
easier to understand the reconnection.