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
This needs to be noted as a breaking change - in the commit message.