Track idle_tref in tcp drain State record in order to cancel.

Without this there's a possibility that a drain that disconnects for
reasons other than idling and then reconnects again soon will have
multiple timers running.
Use timer:now_diff instead of custom now_us function.
Return modified State from close_if_idle.

Also multiply ms instead of dividing us in order to avoid floats.
Pass CloseState and ContinueState into close_if_idle function.
Callers of close_if_idle handle constructing next_state tuple.
Shouldn't be hibernating here.
Clarify cancel_timeout is just a side effect.
Match TRef on IDLE_TIMEOUT_MSG with the idle_tref in State record.
Cancel send timeout when we get tcp_bad.
Clarification of timer cancel in tcp_bad.
Merge branch 'close-idle-tcpdrains'