constructor (options = {}) {
    this.factMap = new Map()
    this.factResultsCache = new Map() // { cacheKey:  Promise<factValu> }
    this.allowUndefinedFacts = Boolean(options.allowUndefinedFacts)
    this.pathResolver = options.pathResolver || defaultPathResolver
    this.events = { success: [], failure: [] }
    this.ruleResults = []
  }
Fact results lookup
Triggers fact computations and saves the results
A new almanac is used for every engine run()