anchor.diff:           (loop for obj in (sheep-hierarchy-list sheep)
               when (has-direct-property-p obj property-name)
               return obj)))
  -    (if owner
  -        owner
  +    (or owner
           (if errorp
               (error 'unbound-property
                      :format-control "Property ~A is unbound for sheep ~S"
  
positive.code:   (loop for pname being the hash-keys of (sheep-property-value-table sheep)
       collect (direct-property-spec sheep pname)))
  
  (defun direct-property-spec (sheep property-name)
    (unless (has-direct-property-p sheep property-name)
      (signal 'unbound-property))
    (nth-value 0 (gethash property-name (sheep-property-spec-table sheep))))
  
negative.code: (defgeneric available-properties (sheep)
    (:documentation "Returns a list of property-spec objects describing all properties available to
  SHEEP, including inherited ones."))
  
  (defgeneric direct-property-spec (sheep property-name)
    (:documentation "Returns the direct local spec for a property named PROPERTY-NAME."))
  
  (defgeneric property-summary (sheep &optional stream)
    (:documentation "Provides a pretty-printed representation of SHEEP's available properties."))
  