Support ImplementationFactories with new IService interface

- The new IService interface has a CreateCallSite method instead of a
  Create method. While Create used to return the service object directly,
  CreateCallSite returns an IServiceCallSite which can be used to either
  get the service object or return a compiled Expression to do the same.
Pull in resolved services if necessary from ClosedIEnumerableService
Test that IServiceCallSites' Build and Invoke methods maintain consistency

- Ensure that singleton and scoped services are not re-instantiated
- Ensure that both Build and Invoke handle various service types
- Ensure that Build can resolve nested scoped services
Lock in ScopedCallSite.Build
Change ServiceProvider's reference to the root container to be a field
Make IService also an IServiceCallSite where this is trivial
Clean up new code related to adding IServiceCallSite