This lets us actually wait for disposal before a graceful exit.
Adds a reusable Callback type that is applied to emitter.ts for improved readability/simplicity.