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
Can we assert this without using private API?
Wouldn't asserting that `injector.get(Service)` throws be enough?

Same for other tests using `._cache`.