async initialize () {
    if (this.isInitializing) {
      return this.initializationComplete
    }

    this.isInitializing = true

    const initTimeout = new Promise((resolve, reject) => {
      setTimeout(() => reject(new Error(`${this.constructor.name || 'Tracker'} init timeout`)), this.trackerInitTimeout)
    })

    try {
      await Promise.race([initTimeout, this._initializeTracker()])
    } catch (e) {
      this.onInitializeFail(e)
    }

    return this.initializationComplete
  }
Standard initialization method to be used to initialize the tracker.  Ensures that the
initialize process is only called once and returns the initializationComplete promise.

Calls internal initialize method