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
I know the rest of this isn't documented, but it might be worth breaking the cycle. Specifically, calling out that these function as an _initial_ set of roles the node should have, which can be changed at runtime using `updateRoles`, might be nice.