code: function cloneInstance( val ) {
  	var cache = [];
  	var refs = [];
  	var names;
  	var name;
  	var desc;
  	var tmp;
  	var ref;
  	var i;
  
  	ref = Object.create( Object.getPrototypeOf( val ) );
  	cache.push( val );
  	refs.push( ref );
  
  	names = Object.getOwnPropertyNames( val );
  	for ( i = 0; i < names.length; i++ ) {
  		name = names[ i ];
  		desc = Object.getOwnPropertyDescriptor( val, name );
  		if ( desc.hasOwnProperty( 'value' ) ) {
  			tmp = ( isArray( val[name] ) ) ? [] : {};
  			desc.value = deepCopy( val[name], tmp, cache, refs, -1 );
  		}
  		Object.defineProperty( ref, name, desc );
  	}
  	if ( !Object.isExtensible( val ) ) {
  		Object.preventExtensions( ref );
  	}
  	if ( Object.isSealed( val ) ) {
  		Object.seal( ref );
  	}
  	if ( Object.isFrozen( val ) ) {
  		Object.freeze( ref );
  	}
  	return ref;
  }
docs: FUNCTIONS // 
  FUNCTION: cloneInstance( val )
  Clones a class instance.
  
  WARNING: this should only be used for simple cases. Any instances with privileged access to variables (e.g., within closures) cannot be cloned. This approach should be considered fragile.
  
  NOTE: the function is greedy, disregarding the notion of a 'level'. Instead, the function deep copies all properties, as we assume the concept of 'level' applies only to the class instance reference but not to its internal state. This prevents, in theory, two instances from sharing state.
  
  @private
  @param {Object} val - class instance
  @returns {Object} new instance