vm: use MakeWeak to fix leaking contexts

This is always something you should do when using `SetHiddenValue`,
apparently. Fixes #6115. Thanks @tjfontaine for the tips.
vm: add isContext, prevent double-contextifying

Previously, calling `vm.createContext(o)` repeatedly on the same `o`
would cause new C++ `ContextifyContext`s to be created and stored on
`o`. Now, repeatedly trying to contextify a sandbox will do nothing
after the first time.

To detect this, an independently-useful `vm.isContext(sandbox)` export
was added.