This commit is backward compatible with previous versions but adds a new option for handling
attribute applications on Set objects. The normal behavior (of applying the attribute
to all elements in the set) is preserved unless the developer explicitly defines how
the attribute should be treated. This relatively simply change allows three useful
cases. First, the user can specify that an attribute to applied to a specific element.
Second, it allows pseudo-attributes to be defined and applied to a specific element. Finally,
and most powerfully, it allows the user to specify a function to be called when a given
attribute is set. That function can, of course, apply the attribute to a number of
different elements.
This commit includes test cases for all these cases.