Allow callers to be notified just before context disposal.

This is important because any async operations that are pending when
we dispose *must* be canceled before we dispose, or else we crash the
node process trying to reference data that has already been freed. jsdom
takes care of cleaning up timeouts and intervals automatically, but if
the caller provides any other asynchronous APIs to code running inside
the context, such as providing access to NodeJS filesystem or network
operations, it's important for the caller to keep track of pending
transactions so that they can be canceled when necessary.