function doParallelLimit(fn) {
    return function (obj, limit, iteratee, callback) {
        return fn(_eachOfLimit(limit), obj, iteratee, callback);
    };
}
Applies the provided arguments to each function in the array, calling
`callback` after all functions have completed. If you only provide the first
argument, `fns`, then it will return a function which lets you pass in the
arguments as if it were a single function call. If more arguments are
provided, `callback` is required while `args` is still optional.

@name applyEach
@static
@memberOf module:ControlFlow
@method
@category Control Flow
@param {Array|Iterable|Object} fns - A collection of asynchronous functions
to all call with the same arguments
@param {...*} [args] - any number of separate arguments to pass to the
function.
@param {Function} [callback] - the final argument should be the callback,
called when all functions have completed processing.
@returns {Function} - If only the first argument, `fns`, is provided, it will
return a function which lets you pass in the arguments as if it were a single
function call. The signature is `(..args, callback)`. If invoked with any
arguments, `callback` is required.
@example

async.applyEach([enableSearch, updateSchema], 'bucket', callback);

// partial application example:
async.each(
    buckets,
    async.applyEach([enableSearch, updateSchema]),
    callback
);