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 think that the only two public API classes I modified are `HazelcastInstance`, `Config`, and the introduction of `MemberRole`.