constructor () {
    /**
     * Stores prop->value mappings.
     * @type {Map<string|symbol, unknown>}
     */
    this._properties = new Map()

    /**
     * Stores prop->Promise mappings.
     * @type {Map<string|symbol, pDefer.DeferredPromise<unknown>>}
     */
    this._promiseMap = new Map()
  }
Context helps the app do many different things without explicitly depending on each other. Instead, each module
can set a property on the context and other modules can get that property from the context when they need it.

Benefits:
* Avoid passing the same object to many different modules.
* Avoid circular dependencies and makes it easier to test modules in isolation.
* Speed up startup time by only loading what we need when we need it.


| Context property exists? | Is the backing promise fulfilled? | Method called | Is a deferred promise created? | Returned Value                                                                                           |
|--------------------------|-----------------------------------|---------------|--------------------------------|----------------------------------------------------------------------------------------------------------|
| No                       | N/A                               | GetProp       | Yes                            | A newly created deferred promise(unfulfilled)                                                            |
| No                       | N/A                               | SetProp       | Yes                            | void                                                                                                     |
| Yes                      | No                                | GetProp       | No                             | The found deferred promise (unfulfilled)                                                                 |
| Yes                      | No                                | SetProp       | No                             | void                                                                                                     |
| Yes                      | Yes                               | GetProp       | No                             | The found deferred promise (fulfilled)                                                                   |
| Yes                      | Yes                               | SetProp       | No                             | We throw an error here. Any getProps called for the property prior to this would have a hanging promise. |

@extends {Record<string, unknown>}
@property {function} launchWebUI