def _replicate(dupit: true, oc: {}, patch: {})
      unless oc.member? self
        self.inject(oc[self] = self.class.new) do |copy, v|
          copy._add(v: v, dupit: dupit, oc: oc, patch: patch)
          copy
        end
      end
      oc[self]
    end
def _replicate(dupit: true, oc: {}, patch: {})
      unless oc.member? self
        self.inject(oc[self] = self.class.new) do |copy, v|
          copy._add(v: v, dupit: dupit, oc: oc, patch: patch)
          copy
        end
      end
      oc[self]
    end
Here, with this Enumerator, we want to create a new empty instance
 and populate it with replicas (or references) of the contained
 objects.

 here, a nasty problem is that there is no unified API for *adding*
 or *substituting* objects into the new collection, so we are going
 to abstract that issue to #_add.

 FIXME: We will initially not handle Enumberables that have instance variables.
 FIXME: This issue will be addressed at a later date.