Use Map for now, need to figure out solution to use WeakMap when non-object keys are possible
Split out async from functional
See #122. Add unit test for context destroy event listeners
Merge remote-tracking branch 'origin/dev' into dev