Introduce an object to aid in creation and management of `@attributes`

Mostly delegation to start, but we can start moving a lot of behavior in
bulk to this object.
Merge pull request #15818 from sgrif/sg-attribute-set

Introduce an object to aid in creation and management of `@attributes`