Heartbeats algorithm:
1. Tunnelbroker after receiving any message from clients starts to wait for `SOCKET_HEARTBEAT_TIMOUT`.
2. If there is `SOCKET_HEARTBEAT_TIMOUT` time without message send `Heartbeat` and start waiting again.
3. If `Heartbeat` was sent and there is another `SOCKET_HEARTBEAT_TIMOUT` time interval without any response - consider the connection unhealthy and close the socket.
From the client side:
1. If there is any message from Tunnelbroker start waiting `CLIENT_SOCKET_HEARTBEAT_TIMOUT`.
2. If there was more than `CLIENT_SOCKET_HEARTBEAT_TIMOUT` from the last message consider the connection unhealthy and close the socket.
`CLIENT_SOCKET_HEARTBEAT_TIMOUT` should be at least `2x SOCKET_HEARTBEAT_TIMOUT`
This diff:
1. Adds new types
2. Adds logic for heartbeats
3. Implements tests exclusive for Heartbeats
4. Make sure heartbeats will not interfere with different tests
Depends on D9618