Put a lot of compile-time and run-time checks on classes of super regions of all SubRegion classes, in order to maintain the existing status quo.
This should make understanding the hierarchy easier, and probably help us catch some bugs.
This is an API-breaking change (we now require explicit casts to specific region sub-classes), but in practice very few checkers are affected.