anchor.diff:      (is (has-property-p child 'parent-var))
       (is (not (has-property-p parent 'something-else)))))
   
  -(def-suite property-reflection :in properties)
  -(in-suite property-reflection)
  +(def-suite property-mop :in properties)
  +(in-suite property-mop)
   
  +;; MOP behavior
  +(test add-property
  +  ;; TODO - check that property metaobjects are being created properly
  +  ;; TODO - check that different property metaobject class instances are created
  +  ;;        depending on the class of the sheep.
  +  )
  +(test remove-property
  +  ;; TODO - check that property metaobjects are being disposed of properly
  +  )
  +(test remove-all-direct-properties
  +  ;; TODO - simple test to make sure basic behavior overriding works.
  +  )
  +;; These two are only supposed to be dispatchable on SHEEP for now.
  +(test has-direct-property-p)
  +(test has-property-p)
  +
  +;; Check that property-spec and standard-sheep can both be subclassed, and behavior
  +;; extended for both of these.
  +(test direct-property-value)
  +(test property-value) ; includes (setf property-value)
  +
  +;; Reflection stuff
   (test property-owner
     (let* ((parent (defclone () ((var "value"))))
            (child (defclone (parent) ((child-var "child-value")))))
  
positive.code:     (is (participant-p sheep 'var))
      (is (participant-p sheep '(setf var)))
      (is (equal "value" (var sheep)))
      (setf (var sheep) "new-value")
      (is (equal "new-value" (var sheep)))
      (is (eql sheep (add-property sheep 'new-var "new-value" :make-accessors-p nil)))
      (is (equal "new-value" (direct-property-value sheep 'new-var)))
  
negative.code: ;;; Properties
  ;;;
  (def-suite properties :in sheeple)
  
  (def-suite properties-basic :in properties)
  (in-suite properties-basic)
  
  (test add-property
    (let ((sheep (clone)))
  