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
`return Collections.unmodifiableSet(roles);` is a better approach, I think. It's neither more nor less susceptible to the volatility of `roles` than this code is, and it will prevent callers from (uselessly) modifying the return without knowing it won't do anything