whole_func_string: function(plugins, config) {
      var self = this;
      var aliasMap = Object.keys(plugins)
        .reduce(function(aliases, pluginName) {
          if (!aliases[pluginName] || !aliases[pluginName].as) {
            aliases[pluginName] = { as: [pluginName] };
          }
  
          aliases[pluginName].as = self._castArray(aliases[pluginName].as);
          return aliases;
        }, config);
  
      var unknownConfigKeys = _.difference(Object.keys(aliasMap), Object.keys(plugins));
  
      if (unknownConfigKeys.length) {
        this._logUnknownPlugins(unknownConfigKeys, 'config.pipeline.alias');
      }
  
      return aliasMap;
    }
func_code_string: function(plugins, config) {
      var self = this;
      var aliasMap = Object.keys(plugins)
        .reduce(function(aliases, pluginName) {
          if (!aliases[pluginName] || !aliases[pluginName].as) {
            aliases[pluginName] = { as: [pluginName] };
          }
  
          aliases[pluginName].as = self._castArray(aliases[pluginName].as);
          return aliases;
        }, config);
  
      var unknownConfigKeys = _.difference(Object.keys(aliasMap), Object.keys(plugins));
  
      if (unknownConfigKeys.length) {
        this._logUnknownPlugins(unknownConfigKeys, 'config.pipeline.alias');
      }
  
      return aliasMap;
    }
func_documentation_string: Build up a hash of the all plugin aliases, keyed by plugin name, with the value being an array of aliases.
  This hash will contain an entry for every installed plugin.
  
  If a plugin has not been referenced in `config.pipeline.alias` then it will be added to the map
  with an alias to it's original name (see `boo` below),
  
  Example return value:
  
  {
  foo: { as: ['bar', 'baz'] },
  boo: { as: ['boo'] }
  }