Basic extension to Add only if service has not been added

cc @davidfowl @divega @lodejard @halter73 

Bare bones helper needed so frameworks can use this when replacing their GetDefaultServices with AddXXX methods to prevent duplicates.  Most GetDefaultServices are using Describer, EF is the outlier, but for them to support config based service replacement, they probably will need to change as well...

Example:

```
        public static IServiceCollection AddOptions([NotNull]this IServiceCollection services, IConfiguration config = null)
        {
            var describe = new ServiceDescriber(config ?? new Configuration());
            services.AddIfMissing(describe.Singleton(typeof(IOptions<>), typeof(OptionsManager<>)));
            return services;
        }
```


AddIfMissing is pretty meh as far as names go...

Some other ideas?
- AddIfNotPresent
- AddIfNotDupe
- AddIfNew
- AddNew
- AddOnlyIfMissing
- AddOnlyIfNew
- Ensure
Yep, Hosting has 3 tests which blew up and it took me a while to figure out this was the reason why :)  Added unit tests for the two new extension methods too now...