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
As long as the `descriptors` IEnumerable can be enumerated multiple times, then `serviceTypeDescriptors` can be too. Under the covers, you'll be enumerating over every element in `descriptors` each time you enumerate over `serviceTypeDescriptors`.

While this isn't the most efficient thing ever, I don't think it's that big of a deal. Most IEnumerable implementations (including ServiceCollection) do allow for re-enumeration, so I think it's fine as is.