Improved Hazelcast reliability under load

In the old approach, system operations like partition movement, member joining/leaving the cluster,
were put on the same queue as regular operations like map.put. The problem is that when the system
is overloaded and the queues are full, that the Hazelcast cluster will not be able to deal correctly
with cluster changes like members joining/leaving or moving partitions, because system operations can't be executed quickly.

This PR change that behavior by introducing the SystemOperation marker interface and executing these
operations with a higher priority than regular operations. On a technical level this is done by introducing additional queues which are checked before normal operation queues.