message: Fix a race in plugin-loader
  It was possible to get this failure at startup:
  ```
  TypeError: Cannot read property 'forEach' of null
  at new ConfiguredPlugins (/srv/hub/node_modules/@cardstack/hub/plugin-loader.js:262:23)
  at PluginLoader.configuredPlugins (/srv/hub/node_modules/@cardstack/hub/plugin-loader.js:108:13)
  at <anonymous>
  at process._tickCallback (internal/process/next_tick.js:188:7)
  ```
diff: @@ -47,12 +47,10 @@ class PluginLoader {
  throw new Error("`config:project` must have a `path`");
  }
  this.project = project;
  - this._installedPlugins = null;
  - this._installedFeatures = null;
  + this._pluginsAndFeatures = null;
  }
  - async installedPlugins() {
  - if (!this._installedPlugins) {
  + async _findPluginsAndFeatures() {
  let output = [];
  let seen = Object.create(null);
  @@ -65,7 +63,6 @@ class PluginLoader {
  let includeDevDependencies = true;
  await this._crawlPlugins(projectPath, output, seen, includeDevDependencies, []);
  - this._installedPlugins = output;
  let allFeatures = [];
  for (let plugin of output) {
  @@ -80,17 +77,22 @@ class PluginLoader {
  };
  allFeatures = allFeatures.concat(features);
  }
  - this._installedFeatures = allFeatures;
  log.info("=== found installed plugins===\n%t", () => summarize(output, allFeatures));
  + return { installedPlugins: output, installedFeatures: allFeatures };
  + }
  +
  + async installedPlugins() {
  + if (!this._pluginsAndFeatures) {
  + this._pluginsAndFeatures = this._findPluginsAndFeatures();
  }
  - return this._installedPlugins;
  + return (await this._pluginsAndFeatures).installedPlugins;
  }
  async installedFeatures() {
  - if (!this._installedFeatures) {
  - await this.installedPlugins();
  + if (!this._pluginsAndFeatures) {
  + this._pluginsAndFeatures = this._findPluginsAndFeatures();
  }
  - return this._installedFeatures;
  + return (await this._pluginsAndFeatures).installedFeatures;
  }
  async configuredPlugins(configModels) {
  