'Set the ``item`` in an evolver of the ``original`` ``PMap`` or
``PClass`` or if the item is itself a Pyrsistent object, add a new
proxy for that item so that further operations can be performed on it
without triggering invariant checks until the tree is finally
committed.
:param item: An object to be added or set on the ``PMap`` wrapped by
this proxy.
:returns: ``self``'

def set(self, key, item):

    if _IEvolvable.providedBy(item):
        self._children[key] = _proxy_for_evolvable_object(item)
    else:
        self._evolver.set(key, item)
    return self
