whole_func_string: function forward(receiver, provider, keys) {
    keys = keys || allKeys(provider);
    keys = Array.isArray(keys) ? keys : [keys];
  
    keys.forEach(function (key) {
      var val = provider[key];
  
      if (typeof val === 'function') {
        receiver[key] = function () {
          return provider[key].apply(provider, arguments);
        };
      } else {
        receiver[key] = val;
      }
    });
    return receiver;
  }
func_code_string: function forward(receiver, provider, keys) {
    keys = keys || allKeys(provider);
    keys = Array.isArray(keys) ? keys : [keys];
  
    keys.forEach(function (key) {
      var val = provider[key];
  
      if (typeof val === 'function') {
        receiver[key] = function () {
          return provider[key].apply(provider, arguments);
        };
      } else {
        receiver[key] = val;
      }
    });
    return receiver;
  }
func_documentation_string: Copy properties from an object to another object,
  where properties with function values will be
  invoked in the context of the provider, and properties
  with non-function values are just copied.
  
  ```js
  var receiver = {};
  var provider = {
  name: 'provider',
  upper: function (str) {
  return '[' + this.name + '] ' + str.toUpperCase();
  }
  };
  var receiver = forward(receiver, provider);
  receiver.name = 'receiver';
  console.log(receiver.upper('foo'));
  //=> [provider] FOO
  ```
  
  @param  {Object} `receiver` Object to receive properties.
  @param  {Object} `provider` Object providing properties.
  @param  {Array} `keys` Optional array of keys to foward.
  @return {Object} Modified `receiver` object with properties from `provider`
  @api public