[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)
I also think instead of all the instanceof checks we should maybe make this an abstract class and add a method
```
public boolean force() {
  return true|false;
}
```

to ClusterStateUpdateTask maybe?