def internal_doc=(doc)
      @doc.merge!(doc) do |key, oldval, newval|
        if key == :members
          oldval.zip(newval) do |ms|
            ms[0].merge!(ms[1])
          end
          oldval
        else
          newval
        end
      end
    end
def internal_doc=(doc)
      @doc.merge!(doc) do |key, oldval, newval|
        if key == :members
          oldval.zip(newval) do |ms|
            ms[0].merge!(ms[1])
          end
          oldval
        else
          newval
        end
      end
    end
Sets the internal doc object.

 The doc object is processed in parallel and then assigned back
 through this method.  But because of parallel processing the
 assigned doc object will not be just a modified old @doc but a
 completely new.  If we were to just assign to @doc the
 #find_members caches would still point to old @doc members
 resulting in mysterious errors further along...