Improvements to FD_ALL.
- Messages should count as heartbeats (msg_counts_as_heartbeat should be default, and as such, deprecated/removed).
- When a multicast message is sent before interval elapsed, we suppress sending a heartbeat
It is crucial that setting the timestamp in the map is quick, especially since this is done on every message. This should not be an issue, as we fetch the current time from the time service, which does not call System.nanoTime() or System.currentTimeMillis() every time.
The advantage is that we only send heartbeats when there is no (multicast) traffic, and we don't suspect a member P when heartbeats have been missing despite receiving traffic from P.
We need to think about whether to consider unicast messages, too, on the sender side: we could populate a bit map with messages sent to members: on a unicast message to P, P's bit would be set in the bit. On a multicast message, all bits would be set. Then, we could selectively send heartbeats only to members with bits set to 0.