Object Versioning: tests and workaround for prop getters/setters

while the current JavaScript syntax for property setters and getters
worked directly with the current Object Versioning implementation, the
legacy __defineGetter__/__defineSetter__/__loookup...-calls seem to
require the workaround of this commit...
Object Versioning: load OV code after Base and ModuleSystem, and

* patch Base's subclass function to use proxies also for the protoclasses
of new classes

note: the classes themselves already get proxied due to the globally patched
eval that now uses source transformations when evaluating class-initializer
templates, because the templates use a function literal...

  (function CLASS_NAME(){ lively.Class.initializer.apply(this, arguments) })

with this approach, all classes get automatically proxied when they are defined
in modules that are loaded after the OV modules. however, no modules get proxied
and also the global lively isn't changed.
Object Versioning: improved two comments
Object Versioning: revert / OV code in lively modules again

This reverts commit 31f485ad7eeb33d3a714c7cc96bd7ed0280faac6 and 825a26b7b26e0e928247bda1b6308f9d9a26de77.
Object Versioning: arrays as actual targets when proxying arrays

this way, proxies for arrays are printed more appropriately and
Object.isArray tests return true for proxied arrays
Object Versioning: proxied classes when versioning starts

fixes fce6b38ec07adace802b68b28d180aca31cd6f0d
Object Versioning: leave original prototype chains untouched

proxies aren't allowed to become prototypes of objects (because those
prototype-proxy's trap would fire when the object's properties get
accessed, e.g. from a proxy around the inheriting object, making it
impossible to change the inheriting object with our kind of proxies).
for this reason, we don't use proxies as prototypes, but have proxy-traps
use an ID (__protoID) again to lookup the correct prototype at runtime.

until now we just used Object.prototype instead of the object the originally
provided proxied prototype wrapped, assuming that basically all objects
(especially all objects with proxies as prototypes) will be used through
proxies. however, there are primitive functions that cannot handle proxied
objects (e.g. DOM functions, Array.concat, Date and RegExp stuff), so proxied
objects have to be unwrapped at those boundaries... therefore, we now preserve
the correct prototype chain of the actual objects along the virtual
__protoID-chain, using the virtual __protoID-chain from proxy-traps
(dynamically dispatching to the correct version of a prototype) while still
having useful prototypes when a proxied object gets unwrapped.
Object Versioning: unwrap proxies at [native code] boundaries

also, check at that point whether the virtual __protoID-chains corresponds
to the prototype chain of the actual objects

this commit unwraps proxies for the following native functions:
* Array.concat
* native functions of DOM nodes
Object Versioning: removed unused function...