Object Versioning: improved lively.ObjectVersioning.isProxy(obj)

lively.ObjectVersioning.isProxy(undefined) -> false
lively.ObjectVersioning.isProxy(Object.create(null)) -> false
Object Versioning: proxies return non-primitive objects proxied

for Object Creation Point 3: built-in functions that create new objects,
e.g. Object.create(somePrototype), should return proxies.
therefore, proxies should always return proxies on property access or
when applied, so that it's enough to proxy certain global built-in
objects.

note: proxying the results of property reads (get trap) and
function application (apply trap) might currently create multiple proxies
for the same objects.
Object Versioning: some initial code to start the versioning

lively.ObjectVersioning.wrapEval: literals in code that's evaluated at
runtime (using the global eval function) should be wrapped by proxies
(using our source code transformations)

lively.ObjectVersioning.wrapGlobalObjects: proxies all global objects,
including Object, JSON, Math...