async function callAsyncSequentialHook (container, hook, toArgs, fromResult, start) {
    // hook may return a promise.
    // all plugins that implement this hook will run, passing data onwards
    let plugins = _getSortedPlugins(container.__plugins, hook);
    let output = start;

    for (let i = 0; i < plugins.length; i++) {
        let args = toArgs(output);
        let hr = await _callAsyncHook(plugins[i], hook, args);

        if (hr !== null && hr !== undefined) {
            output = fromResult(hr, output);
        }
    }

    return output;
}
@param {PluginContainer} container 
@param {string} hook 
@param {function} toArgs 
@param {function} fromResult 
@param {any} start 
@return {Promise}