http: use once() instead of on() for timeout listeners

Switching to `once()` helps to avoid potential memory leaks
and reduces the need to call `removeListener()`.

Closes #7297
No, the socket persists across requests.  Even if that wasn't the case, it still seems valuable to me to be able to rearm the timer multiple times.