Discovery: Give a unique id to each ping response 

During discovery a node gossips with other nodes to discover the current state of the cluster - what nodes are out there, what version they use and most importantly whether there is an active master out there.  During this ping process we may end up in a situation where old information is mixed with new. This is comment if a couple of master election happen in rapid succession. 

This PR adds a monotonically increasing id to each ping response. This makes it easy to always select the last ping from every node.
I chose for simplicity (synchronized methods + normal map) because we have a slightly complex update rule (update if id is >= existing id): 

```
 PingResponse existingResponse = pings.get(ping.node());
 // in case both existing and new ping have the same id (probably because they come
 // from nodes from version <1.4.0) we prefer to use the last added one.
 if (existingResponse == null || existingResponse.id() <= ping.id()) {
```