Creates a function that, when called, invokes the method at `object[key]`
and prepends any additional `bindKey` arguments to those provided to the bound
function. This method differs from `_.bind` by allowing bound functions to
reference methods that will be redefined or don't yet exist.
See http://michaux.ca/articles/lazy-function-definition-pattern.

@static
@memberOf _
@category Functions
@param {Object} object The object the method belongs to.
@param {string} key The key of the method.
@param {...*} [arg] Arguments to be partially applied.
@returns {Function} Returns the new bound function.
@example

var object = {
'name': 'moe',
'greet': function(greeting) {
return greeting + ' ' + this.name;
}
};

var func = _.bindKey(object, 'greet', 'hi');
func();
// => 'hi moe'

object.greet = function(greeting) {
return greeting + ', ' + this.name + '!';
};

func();
// => 'hi, moe!'
function bindKey(object, key) {
      return arguments.length > 2
        ? createBound(key, 19, nativeSlice.call(arguments, 2), null, object)
        : createBound(key, 3, null, null, object);
    }