Object Versioning: source transformations to proxy literal objects

Object Creation Point 1: creating objects through literals

for this versioning approach to work, objects need to wrapped by proxies.
that is, proxies need to be created for all (new) objects. for this,
source code should be transformed so that all literal objects are wrapped
into proxy-creation functions.

literals that create objects include literals for objects, for arrays,
and for functions.

numbers, strings, and boolean values are primitive.
Object Versioning: tests whether arrays are handled like objects
Object Versioning: proxied constructors return proxied instances

Object Creation Point 2: creating objects by invoking constructors

as with object literals, invoking a constructor creates a new object,
that also needs to be wrapped by a proxy:

assuming that all functions, including all constructors, are already
proxied, proxied constructors just need to return proxies.
therefore, the Versioning Proxy handler returns proxies for newly created
objects in its >>construct trap.