[Discovery] accumulated improvements to ZenDiscovery

This PR contains the accumulated work from the feautre/improve_zen branch. Here are the highlights of the changes: 

__Testing infra__
- Networking:
    - all symmetric partitioning
    - dropping packets
    - hard disconnects
    - Jepsen Tests
- Single node service disruptions:
    - Long GC / Halt
    - Slow cluster state updates
- Discovery settings
    - Easy to setup unicast with partial host list
	
__Zen Discovery__
- Pinging after master loss (no local elects) 
- Fixes the split brain issue: #2488
- Batching join requests
- More resilient joining process (wait on a publish from master)
maybe we can turn this around and do 
```Java
if (electMaster.hasEnoughMasterNodes(possibleMasterNodes)) {
  // lets tie break between discovered nodes
  return electMaster.electMaster(possibleMasterNodes);
} else {
  logger.trace("not enough master nodes [{}]", possibleMasterNodes);
  return null;
}
```