function remap(object, mapping, copyAll) {
  var result = _.zipObject(_.values(mapping), []);

  _.forEach(object, function(value, key) {
    if(_.has(mapping, key)) {
      _.set(result, _.get(mapping, key), value);
    } else if(copyAll !== false) {
      _.set(result, key, value);
    }
  });

  return result;
}
Copies all key-values in a object to a new object with new keys.

@static
@memberOf _
@category Object
@param {object} object - The source object
@param {object} [mapping] - The mapping info
@param {boolean} [copyAll=true] - Copies key-values when they are not specified in the mapping.
@returns {object} The remapped object.
@example

_.remap({a: 'test', b: 123, c: true}, {a: 'name', b: 'value'});
// => {name: '123', value: 123, c: true}

_.remap({a: 'test', b: 123, c: true}, {a: 'name', b: 'value'}, false);
// => {name: '123', value: 123}

_.remap({a: 'test', c: true}, {a: 'name', b: 'value'});
// => {name: '123', value: undefined, c: true}

_.remap({a: 'test', c: true}, {a: 'name', b: 'value'}, false);
// => {name: '123', value: undefined}