add channel expiry check when obtaining channel

we will close the channel if it expires, and reconnect. this does not
affect in-flight writes on the channel; it is just a request to close
the channel. so at any given time, there may be 2 * C channels open to
the other host (steady state C, typically 1)