Refactor TypeContents to be more scrutable. In particular, do not require types
to register such fine-grained distinctions, but rather focus on the end
properties we're trying to compute. Also, cleanly distinguish when properties
must be found in *owned* types vs *reachable* types.

Fixes #10157