batchEnd() {
    this.__batchDepth--

    if (this.__batchDepth <= 0) {
      // set to true to catch if dispatch called from observer
      this.__isDispatching = true
      try {
        this.__notify()
      } catch (e) {
        this.__isDispatching = false
        throw e
      }
      this.__isDispatching = false
    }
  }
Ends a batch cycle and will notify obsevers of all changes if
the batch depth is back to 0 (outer most batch completed)