function baseCallback(func, thisArg, argCount) {
  var type = typeof func;
  if (type == 'function') {
    return thisArg === undefined
      ? func
      : bindCallback(func, thisArg, argCount);
  }
  if (func == null) {
    return identity;
  }
  if (type == 'object') {
    return baseMatches(func);
  }
  return thisArg === undefined
    ? property(func)
    : baseMatchesProperty(func, thisArg);
}
The base implementation of `_.clone` without support for argument juggling
and `this` binding `customizer` functions.

@private
@param {*} value The value to clone.
@param {boolean} [isDeep] Specify a deep clone.
@param {Function} [customizer] The function to customize cloning values.
@param {string} [key] The key of `value`.
@param {Object} [object] The object `value` belongs to.
@param {Array} [stackA=[]] Tracks traversed source objects.
@param {Array} [stackB=[]] Associates clones with source counterparts.
@returns {*} Returns the cloned value.