Extract TaskMapping::size.
Rename RegionGrouping -> RegionMapping.
Create a RegionMapping in Schedule.
ExecutorPreference accepts a RegionMapping.

Doesn't do anything with it yet.
Add RegionMapping.Region::toString.
Promote regionMapping to member, demote regionServers.
Refactor shouldRespectPreferenceOrderWherePossible to use sorted hosts.

This reflects what will be the new reality: RegionMapping implies this sort order.

Notice the test still works: if you comment out

    Collections.sort(preferences);

..in Schedule, it still (correctly) fails.
ExecutorPreference now driven by RegionMapping.
ExecutorPreference no longer accepts region server lists.
Log preferred host selections.
doco
ScanSpout fetches its region data from a RegionMapping.

It doesn't loop over *all* it's assigned regions yet.
Drop unused method.
No need for HBaseComponent to sort region metadata now.
typo
Only expose per-task regions to components at runtime.

They don't care about the others.
HBaseComponents can furnish their TopologyContexts.

Or rather, subtypes are required to, since storm annoyingly uses multiple separate interfaces to communicate it.
Lazily create ResultScanner, use inherited open().