Multiple Windows and Refactoring

Refactored Window and WindowService to allow a different interface. As
long as the engine gets initialized at the beginning we can create and
show windows at will...should work for any number of windows. We can
worry about performance characteristics and threading later. Things will
get much more complicated.