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
All of the other initialization is in the constructors. I think this should be too. I'd replace the (useless) `super()` calls with `this()`, and then you can do this once in the `MemberInfo()` constructor