I came to the conclusion that Join should be handled differently since that is the one that usually happens in bursts and on a small subset of nodes (the seed nodes). I think in the future we should do the following strategy:
 - In case of joins bias gossip towards the seeds before gossiping to the rest of the cluster to aggregate and merge as much information as possible about joins in the batch
 - In the case of other events (leaving, unreachable) where changes are less bursty and more dispersed among the nodes, we should do an aggressive bootstrap without waiting as it is done in this PR.

I will still try to run this branch just out of curiosity, but I think in this form it will be not enough and I will stash it for later.