Add a context factory classmethod that handles creation of a context. The factory method can accept a context instance, which will be returned immediately. If no context instance is provided the factory will handle creating a context using the provided providers and parent. If no providers are given the function and type providers will be used.
Creating a context directly without providers will no longer set any default providers.