code: function extend(name, constructor, prototype, statics) {
    var superConstructor = this;
  
    if (typeof name !== 'string') {
      statics = prototype;
      prototype = constructor;
      constructor = name;
      name = null;
    }
  
    if (typeof constructor !== 'function') {
      statics = prototype;
      prototype = constructor;
      constructor = function() {
        return superConstructor.apply(this, arguments);
      };
    }
  
    extendObject(false, constructor, superConstructor, statics);
  
    constructor.prototype = createObject(superConstructor.prototype, prototype);
    constructor.prototype.constructor = constructor;
  
    constructor.class_ = name || superConstructor.class_;
    constructor.super_ = superConstructor;
  
    return constructor;
  }
docs: Extends the constructor to which this method is associated with the <code>prototype</code> and/or
  <code>statics</code> provided.
  
  If <code>name</code> is provided, it will be used as the class name and can be accessed via a special
  <code>class_</code> property on the child constructor, otherwise the class name of the super constructor will be used
  instead. The class name may also be used string representation for instances of the child constructor (via
  <code>toString</code>), but this is not applicable to the <i>lite</i> version of Nevis.
  
  If <code>constructor</code> is provided, it will be used as the constructor for the child, otherwise a simple
  constructor which only calls the super constructor will be used instead.
  
  The super constructor can be accessed via a special <code>super_</code> property on the child constructor.
  
  @param {string} [name=this.class_] - the class name to be used for the child constructor
  @param {Function} [constructor] - the constructor for the child
  @param {Object} [prototype] - the prototype properties to be defined for the child
  @param {Object} [statics] - the static properties to be defined for the child
  @return {Function} The child <code>constructor</code> provided or the one created if none was given.
  @public