I just realized that the bytecode held by the function doesn't actually hold a ref to the script_obj at all. It holds a ref to the named item, but that doesn't hold a ref to the script_obj, and it's ref-counted for the typeinfo (and only its name is needed, that's what's refcounted).
So I slightly simplified the interpreted functions to only deal with scopes now since releasing them won't release the script_obj so there's no need to handle it.
I also have an idea how to fix the scopes not being collected right now, in `InterpretedFunction_gc_traverse`, which can then simplify it to a couple of lines. But it needs some changes to the scope_chain_t so that it is wrapped in a dummy jsdisp, so I'll keep that for another MR. I will add tests for that too, of course. Anyway just wanted to mention that the `FIXME` there is temporary!