anchor.diff:  	    (%get-property-object sheep property-name)
   	  (when has-p
   	    (return-from get-property-with-hierarchy-list (%value prop-obj))))
  -     finally (error 'unbound-property)))
  -
  -(defun get-property-owner-with-hierarchy-list (list property-name)
  -  (loop for sheep in list
  -     do (multiple-value-bind (prop-obj has-p)
  -	    (%get-property-object sheep property-name)
  -	  (declare (ignore prop-obj))
  -	  (when has-p
  -	    (return-from get-property-owner-with-hierarchy-list sheep)))
        finally (error 'unbound-property)))
   
   (defgeneric (setf get-property) (new-value sheep property-name)
  
positive.code:       (unlock-property sheep property-name)
        (lock-property sheep property-name)))
  
  (defgeneric get-property (sheep property-name)
    (:documentation "Gets the property value under PROPERTY-NAME for an sheep, if-exists."))
  (defmethod get-property ((sheep standard-sheep) property-name)
  
negative.code:     :accessor sheep-direct-properties)
     (property-owners
      :initarg :property-owner
      :initform (make-weak-hash-table :weakness :value :test #'equal)
      :accessor sheep-property-owners)
     (roles
      :initform nil
  