Added IContainer

Updated all the public uses of Container to use IContainer instead.
This prepares us for adding per-resolve lifetime in the container.
Using separate ResolveTimeContainer

Separating out actual resolve logic into separate nested class.
This lets us have a place to put the resolve-time state without
contaminating the factory methods with parameters that most of
them don't need to know about.
Supporting lifetimes that don't implement Enter
Implemented PerResolve.Lifetime