Topology Aware Partition Group

Back in October I submitted a pull request for a TopologyAwarePartitionGroup implementation that automatically joins members from various sites, racks etc into a group that will try to automatically place backups at the high common denominator (e.g. first try site, then rack, then host, the process etc)

At the time, they consensus was to try and implement it in a different way using member attributes. 

I've finally managed to get around to doing this. 

I've done a fairly simplistic implementation of member attributes (not changeable at runtime) and then used specific ones to implement the required functionality for the topology aware partition group.

I'd appreciate some feedback if the approach I've taken is ok and if this is going anywhere, before I attempt to do full documentation etc.