Prototype override/default mode for services

Looking at allowing framework services to be registered using default precedence, this allows duplicate service dependencies to be added to the service collection, but highest precedence (OverrideSingle > OverrideMany > DefaultSingle > DefaultMany) will be returned.

TODOs: Supporting other DI containers, also need a better name for OverrideMode
Add this to the other public constructors.