*
@method clone(<obj> = {}, [deep] = false)
@returns Cloned object
@short Creates a clone (copy) of <obj>.
@extra Default is a shallow clone, unless [deep] is true. %clone% is available as an instance method on extended objects.
@example

Object.clone({foo:'bar'})            -> { foo: 'bar' }
Object.clone()                       -> {}
Object.extended({foo:'bar'}).clone() -> { foo: 'bar' }

*
function(obj, deep) {
      var target;
      // Preserve internal UTC flag when applicable.
      if(isDate(obj) && obj.clone) {
        return obj.clone();
      } else if(!isObjectPrimitive(obj)) {
        return obj;
      } else if (obj instanceof Hash) {
        target = new Hash;
      } else {
        target = new obj.constructor;
      }
      return object.merge(target, obj, deep);
    }