feat(injector): implement a different approach to injector scopes

An easy way to review this is to read the tests and see if that's what we want
I'd remove this assertion. If it throws, it will fail on line 729. I like it explicit in the previous test, where we say "this one throws, this one not" but I don't think we need it here.