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
I don't think using .once() here is correct; it means you can only ever have one timeout event on the socket object.