Concurrency issue in getExecutorService.submitToMembers()

Fixed a ProblematicTest which "failed randomly":
com.hazelcast.client.executor.ClientExecutorServiceSubmitTest.submitCallableToMember_withMultiExecutionCallback()

The cause was a concurrency issue in the used method:
com.hazelcast.client.proxy.ClientExecutorServiceProxy.submitToMembers(Callable<T> task, Collection<Member> members, MultiExecutionCallback callback)

The used counter to determine if onComplete should be called is thread safe (AtomicInteger), but not the used map (HashMap). So Thread A could have add a new value to the map and reduced the counter. Thread B did the same but called onComplete with just its local changes in the map. A typical visibility issue.

Changing the map to a ConcurrentHashMap would solve the issue, but doesn't support null values (which are created by Runnable and Callable with null as result). I tried several approaches (saving members with null values and creating a new map before calling onComplete, implementing a new ConcurrentHashMap with null support etc.). Finally - after some discussions with @noctarius - we decided to just use a Collection.synchronizedMap() in this case.

In addition a lot of tests in com.hazelcast.client.executor and some functinos in ClientExecutorServiceProxy had unnecessary warnings which could easily be fixed.