The SetMethod is the abstract base of all setter objects. It provides a single virtual interface that allows clients to set the requested property value. Derived classes provide implementations of this method. Actually, this functor is a little overused because it serves the purpose of most mutators. The get, add, and remove variants all have the same basic signature, so we can reuse the derived variants of this class for all of those.