Function makeIsolated

Isolated objects contain no mutable aliasing outside of their own reference tree. They can thus
be safely converted to immutable and they can be safely passed between threads.

The function returns an instance of Isolated that will allow proxied access to the members of
the object, as well as providing means to convert the object to immutable or to an ordinary
mutable object.