create the actual windows. The creation of windows is done by
TopLevel as part of putting up a DisplayHandle inside a window,
so mkWindow and mkShellWindow is probably only of use if you
want to provide your own Window wrappers.
Distinguish between four different types of windows: