Member roles for data re-partitioning

First approach at defining member roles which can be used to control the responsibilities that a node has when it becomes a cluster member
Please use `EnumSet` instead (across this whole review). Also, you never modify these. Why not just wrap it in `Collections.unmodifiableSet` here, once and for all? Then the accessor can just return the field without more processing.