Windows: create new window hierarchy

WindowBase -> Window and WindowBase -> DragWindow
WindowProxy: implement method for returning the current theme
Theme: implement methods for getting window in/out animations.
Window: implement overrides for showing / hiding that use theme in / out animations
Theme: set the animationType key for the window animations so they can be identified later
Window: better handling for KVC and our custom animations
Window: delegate over the in/out animations

this way we can actually order out the window after the out animation completes