Make extension more palatable

This change takes the opportunity to factor out a couple of subclasses
that should make extension more palatable.  At the same time, it
cleans up many of the existing components so that they are more
similar to one another.  Finally it improves the extension
documentation to talk about the new base classes, the unified
component contract, and documents the content of the context passed in
during initialization.

[#57494488]
Merge 57494488-subclassing to master

[Completes #57494488]
Merge remote-tracking branch 'upstream/master'