Make JSContext and JSRuntime disposable
Track JSContext instances in a global weak registry so that you can retrieve the relevant one for a JSContextPtr
Make Rooted only delete roots in its finalizer if the associated managed JSContext is still alive. If no managed context is known, or it is dead, we suppress root deletion since it's a) unnecessary and b) gonna crash anyway.
Test simplification