Replace heartbeats threads by timers

It will allow to decrease the number of client threads and rely on
.net timer threads instead.

This patch timers that are rescheduled at each run to avoid potential
multiple concurrent access.

It also remove the notion of background io thread for heartbeat
mechanism