Fix loop handler keepalive race condition

Previously if a loop handler received the timeout message from a
previous request on the same connection the socket would be set to
{active, once} incorrectly - when a socket packet was already in the
message queue. This second packet would not be added to the buffer
before a Handler:info/3 call if a user message was in the message
queue before both socket packets.

Should cancel active timer before `Handler:terminate/3` is called?

Is it intended that a socket packet resets the timeout timer?