Refactoring ServiceCollection

* Remove use of IConfiguration from ServiceCollection
* Removing the Add* methods from IServiceCollection that don't accept an
  IServiceDescriptor

Fixes #116 #117
Interesting point, but I checked and the compiler does not complain about null checks against parameters with unconstrained generic types. It does complain if you constrain the generic parameter to structs.

Ironically, it also complains if you try comparing an unconstrained generic parameter to `default(TService)` instead of null (presumably because `==` might not be defined for some value types). I suspect null checking generic parameters is a special case because it is so common and the check can simply be omitted for value types.

I do think that adding `where TService : class` might be warranted anyway.