New version stores detached locals buffer into the scope itself, but only when needed to avoid waste for non-detached scopes. It first stores the args, followed by the local vars (which are offset by var_offs), so index 0 into the buffer is first arg, and `var_offs + 0` is the first local var.
I had to introduce a new index accessing for the local scope vars. `ref` can't be used since it indexes them based on where they're found in the code, including other scopes, and we can't change that since stuff like the TypeInfo relies on it (and tests would fail). Instead, I introduced `scope_offs` as an index of a given var into the scope's detached locals.
I also made use of the scope's dispex now instead of allocating the default variable object, because we're already using it, and there's no reason to have *two* objects just for some couple extra props like `arguments` or the function's name in ES5, which feels too much like a waste. We don't keep a ref to it in this special case though, to prevent cyclic refs in the very common case, so it can be freed immediately instead of waiting for the garbage collector.