Start RegionGrouping, which maps tasks to sets of regions.

It attempts to preserve locality while doing so.  The mapping is allowed to assign multiple regions to a single task; this will give us the flexibility we need to run topologies with fewer tasks.
Region comparison secondarily sorts by region name.

That should be sufficiently unique to make the tests deterministic.
Make RegionGrouping fixture flexible enough to express dup hosts.
Define and compute a minimal server-preserving region grouping.
Don't coalesce more than necessary.
Coalesce while violating server locality if necessary.

When necessary, still try to so so fairly.