This minor focus on a small refactor on `Scope`, we like the idea that `Scope` is a temporary view of its parent `Graph`, so following change is made:
- both resource and non-resource instances created in scope will stay in the scope
- when a graph create a scope, it shares a copy of its resolved singletons and registered singletons, scope can read them, but can not modify them.
This gives a better separation between `Graph` and `Scope`.