Add support to create window of different shell types.

Currently, we always hardcode the window to be of TopLevel type.
This patch makes changes so that the display doesn't assume anything
and caller is responsible for explicitly defining the shell type of
window.
Implement Fullscreen mode
Implement Maximize support