Use TryAdd in AddXxx methods to only add services if not already present.

Issue #956 and also see pull request #1129.

This change updates all of our AddXxx methods to use TryAdd when adding to the service collection such that only services that are not already registered will be registered. This also means that the code we had to check the service collection for "hosting" services is no longer needed.

Note that services for which it is expected that multiple instances can be registered (e.g. listeners and data sources) must not use TryAdd since otherwise only the first registered will be used.
So here, instead of try adding a new service collection that you fill, just directly TryAdd which gets rid of the nested ServiceCollection which looks a bit odd:

```
var describer = new ServiceDescriber(Configuration);
servicesCollection.AddScoped(your 3 listeners)
servicesCollection.TryAdd(describer.Singleton<>()) 
```