When a window that is mapped is reparented away from root, that is the same as it being completely unmapped+destroyed from our persective. The window will no longer be in the same position on screen, and we will no longer want to listen to events on it.
Prior to this, the w->pixmap would not be freed when a mapped window was reparented away from root, and damage would not be updated for the screen correctly.
When a window resizes while it is unmapped, don't destroy it's pixmap, as that kills and fade going on.
If a window is already unmapped (and therefore already fading out, don't override the fadeout with a new one when the window is destroyed.
When a window maps, if it already has a pixmap, this is stale data, so free it so that a new pixmap can be retrieved from the newly mapped window.