code: function(obj, multi) {
      var result = {};
      multi = multi === true;
      forEachProperty(obj, function(val, key) {
        if (hasOwn(result, val) && multi) {
          result[val].push(key);
        } else if (multi) {
          result[val] = [key];
        } else {
          result[val] = key;
        }
      });
      return result;
    }
docs: *
  @method invert([multi] = false)
  @returns Object
  @short Creates a new object with the keys and values swapped.
  @extra If [multi] is true, values will be an array of all keys, othewise
  collisions will be overwritten.
  
  @example
  
  Object.invert({foo:'bar'})     -> {bar:'foo'}
  Object.invert({a:1,b:1}, true) -> {1:['a','b']}
  
  @param {boolean} [multi]
  
  *