addAddon(name, version = '0.0.0', optionsOrCallback) {
    const options = getOptionsObjectWithCallbackFunction({ allowCachingPerBundle: false }, optionsOrCallback);

    return this.addDependency(name, version, {
      ...options,
      callback: (addon) => {
        prepareAddon(addon, options);

        // call original `options.callback` if it exists
        if (typeof options.callback === 'function') {
          options.callback(addon);
        }
      },
    });
  }
Add an addon to this object's `dependencies` list. The addon files will be written in
this object's `node_modules/<addon_name>` directory when this object is written out.

@param {String} name name of the addon
@param {String} version version of the addon, defaults to '0.0.0'
@param {Object|Function} optionsOrCallback an object consisting of properties and values to apply when creating
the addon, or a callback function to pass the newly-created FixturifyProject to. Important options
include 'allowCachingPerBundle' (true if the addon can be proxied, defaults to false) and 'callback' (if you want to include
a callback function while also specifying other properties.)
@returns {FixturifyProject} the newly-created addon