Alias a property that is already defined for this Object. Moves the existing
property definition on {obj[method]} to {method}_without_{suffix} and
assigns {f} to both {method}_with_{suffix} and {method}.

For example, the following code will override the "save" method of the
{ctor.prototype} with {my_save} and make the old version available as
{save_without_timestamp}.

Mixin.included = function(ctor) {
mixin.alias(ctor.prototype, "save", "timestamp", my_save);
}

@param {Object} obj    The target object.
@param {String} method The base method name.
@param {String} suffix A suffix that will be added to the method name(s).
@param {Function} f    The function to use to override the method.
@api public
function alias(obj, method, suffix, f) {
  if (obj[method + "_without_" + suffix]) {
    throw(method + "_without_" + suffix + " already defined.");
  }

  var was = obj[method];
  obj[method + "_without_" + suffix] = was;
  obj[method + "_with_" + suffix] = obj[method] = f;
}