Object Versioning: obj.isProxy() (instead of lively.isProxy())

--- with @bastiansteinert
Object Versioning: more global helpers, less test helpers
Object Versioning: micro benchmark for looking up prop in proxy

--- with @bastiansteinert
Object Versioning: source transformations: handle accessor in {}s

object literals may include getters and setters for properties, which
are not ordinary slots and can't just take proxied functions instead.
therefore, we need to remove such accessor functions from object literals
and define the properties in question with their accessor functions right
after the objects have been created.

we do both things in a temporary function that we apply immediately to be
able to know which object's properties need to be defined (using a temporary variable in the temporary function). this then also works, when the new object
is created, for example, just as an argument to a function call...

example code to transform:

  obj = {
      age: 2,
      set value(string) {
          this._value = string;
      },
      get value() {
          proxyFor(function() {return this._value;})
      },
  }

transformed code:

  obj = (function() {
    var newObject = lively.versions.ObjectVersioning.proxyFor({
      age: 2
    });

    Object.defineProperty(newObject, "value", {
        get: lively.versions.ObjectVersioning.proxyFor(function value() {
            return this._value;
        }),
        set: lively.versions.ObjectVersioning.proxyFor(function value(string) {
            this._value = string;
        }),
        enumerable: true,
        writable: true,
        configurable: true
    });

    return newObject;
  })()
Object Versioning: added aProxy.proxyTarget for convenience