code: function deepCopy(obj) {
  	var res;
  	var i;
  	var key;
  	if (isTerminal(obj)) {
  		res = obj;
  	} else if (Array.isArray(obj)) {
  		res = Array(obj.length);
  		for (i = 0; i < obj.length; i++) {
  			res[i] = deepCopy(obj[i]);
  		}
  	} else {
  		res = {};
  		for (key in obj) {
  			res[key] = deepCopy(obj[key]);
  		}
  	}
  	return res;
  }
docs: Returns a deep copy of the given value such that entities are not passed
  by reference.
  
  @method deepCopy
  @static
  @param {Mixed} obj - The object or value to copy
  @return {Mixed}