Also iterates through this window's children and destroys them.
Visibility is set to false.
Method sends out
WindowEvent#EVENT_WINDOW_DESTROY_NOTIFY and
WindowEvent#EVENT_WINDOW_DESTROYED destruction events
to all of it's
WindowListener.
This method invokes
Screen#removeReference() after it's own destruction,
which will issue
Screen#destroy() if the reference count becomes 0.
This destruction sequence shall end up in
Display#destroy(), if all reference counts become 0.
The Window can be recreate via
#setVisible(boolean).
This method is lifecycle heavy.