code: function clone(c, wl, bl) {
  	var cl = {}, cp, t;
  	for (var keys = Object.keys(c), l = 0; l < keys.length; l++) {
  		cp = c[keys[l]];
  		if (bl && bl.indexOf(cp) >= 0) {
  			continue;
  		}
  		if (Array.isArray(cp)) {
  			cl[keys[l]] = cp.slice(0);
  		} else if ((t = typeof cp) === 'function') {
  			if (!wl || wl.indexOf(cp) >= 0) {
  				cl[keys[l]] = cp; // cp.bind(cp);
  			}
  		} else if (cp == null || t === 'string' || t === 'number' || t === 'boolean' || util.isRegExp(cp)
  				|| util.isDate(cp) || util.isError(cp)) {
  			cl[keys[l]] = cp;
  		} else if (t !== 'undefined') {
  			cl[keys[l]] = clone(cp, wl, bl);
  		}
  	}
  	return cl;
  }
docs: Clones an object
  
  @param c
  the {Commit} to clone
  @param wl
  an array of white list functions that will be included in the
  clone (null to include all)
  @param bl
  an array of black list property values that will be excluded from
  the clone
  @returns {Object} clone