loadAddon(addonInstance) {
    // to maintain backwards compatibility for consumers who create a new instance
    // of the base addon model class directly and don't set `packageRoot`
    let pkgInfo = this._readPackage(addonInstance.packageRoot || addonInstance.root, addonInstance.pkg);

    // NOTE: the returned pkgInfo may contain errors, or may contain
    // other packages that have errors. We will try to process
    // things anyway.
    if (!pkgInfo.processed) {
      pkgInfo.addon = addonInstance;
      this._resolveDependencies();
    }

    return pkgInfo;
  }
Do the actual processing of the root directory of an addon, when the addon
object already exists (i.e. the addon is acting as the root object of a
tree, like project does). We need the object in order to find the internal addons.
_readPackage takes care of the general processing of the root directory
and common locations for addons, filling the cache with each.

Once all the addon processing is done, go back through all cache entries
to create references between the packageInfo objects.

@public
@method loadAddon
@param addonInstance the instance of the Addon object to load package data
about into the cache.
@return {PackageInfo} the PackageInfo object for the given Addon object.
Note that if the addon path is already in the cache, that will be returned.
No copy is made.