Rework SummaryList to use generics.

This removes most of the casts and makes the architecture overall much cleaner, simpler, and more maintainable.
However, it also makes enums self-linking again

Test: no change to integration tests; refactor-only change.
Change-Id: I50cdeaa6f27dca3f248adde9578ba232eaafc394
146 files changed