Interface for objects that can return a shell. This is normally used for
opening child windows. An object that wants to open child shells can take
an IShellProvider in its constructor, and the object that implements IShellProvider
can dynamically choose where child shells should be opened.