Object Versioning: objects hold proxies instead of alias objects

this way references to proxies get passed around and two proxies
to the same object should be the same, also makes the proxy handlers
simpler
Object Versioning: refactored proxy creation + added isProxy(obj)

>>lively.ObjectVersioning.isProxy(obj): checks whether obj is a
versioning proxy

>>lively.ObjectVersioning.addObject(target): adds target to the
global Object Table and returns a proxy for it
Object Versioning: refactored and cleaned tests
Object Versioning: explicit versions

current state can be explicitly commited as a version instead of
creating a version on every change

creating a new version copies the current OT, sets that as new current OT,
announces that new OT as version, and freezes all objects in that OT.
setting a property on any object therefore checks whether the object
is frozen, then clones it and writes the new clone to the new OT if so.