Copies value and everything it points to, and returns the copy (null for null). Pointers that
appear more than once are copied once, so shared and cyclic data keeps its shape. The copy is
allocated with context.allocator.
Remembers which source pointers were already copied, so shared and cyclic data is copied once.
Pass one to several Deep_Copy calls to keep that sharing across them.