Extract tcp idle fuzzing out into start_idle_timer; use it in both places.

Without this, the fuzzing of the timer will only apply to the first time it's started.
Merge branch 'close-idle-tcpdrains'
Merge branch 'master' into close-idle-http-drains
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.
Replace cancel_reconnect with more general cancel_timer in HTTP drains.
Cancel existing idle timers when starting new ones in HTTP drains.