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
Before we can submit this upstream we're going to have to revert all the places this has happened. This won't pass their Checkstyle rules. Reverting it now will make your diff a fair amount smaller and easier to parse