[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 like the fact that you indicate the criteria (master or not) in the class name. I also don't like the instanceof checks. Perhaps keep the current name and add a method call `runOnlyIfMaster`and the default implementation will return true while the ClusterStateNonMasterUpdateTask will override it to false?