> also shouldn't these listeners be removed early if unload occurs before the DOMContentLoaded or load events?

I don't think it's necessary because if sandbox is nuked it GC-ed regardless of weather it had listeners on other
windows and if that's not the case it's a bug. And we do nuke add-on sandbox allowing GC to claim all of this: https://github.com/mozilla/addon-sdk/blob/master/app-extension/bootstrap.js#L284

Very little window for `load` / `DOMContentLoaded` events to go through is if add-on has being unloaded while
window is being loaded and window managed to load before add-on was unloaded completely.

On the other hand not doing all the manual tear down will benefit both add-on and firefox unloads, so I think we
should leverage GC as much as we can instead of doing manual tear-downs.

Finally all the high level APIs that will use this will likely handle unloads in some ways and that's where listeners to `exports.events` can be removed. This has benefits of having less things to do at unload as well.