code: function(properties, cls, superClass, options) {
    var opts = _.defaults({}, options, { wrap: true });
    if (opts.wrap) {
      var prototype = cls.prototype;
      if (superClass) {
        // combine the cls prototype with the superClass prototype, but do so
        // using a new prototype chain to avoid copying (and invoking accessor
        // methods) either prototype. the combined prototype can be used to wrap
        // properties.
        prototype = Object.create(prototype);
        prototype.prototype = superClass.prototype;
      }
      properties = wrap.super.properties(properties, prototype);
    }
    _.extend(cls.prototype, properties);
  }
docs: Generic reopen to use for both instance and static methods.
  
  @name Class~reopen
  @param {Object} properties The properties to add.
  @param {ClassConstructor} cls The class to add properties to.
  @param {ClassConstructor} superClass The class's super class.
  @param {Object} [options]
  @param {Boolean} [options.wrap=true] Whether to wrap the properties.