Rework xdg-shell implementation
This change splits the XdgShellClient class to better match existing abstractions in the xdg-shell protocol and fix a few issues related to sending configure events.
In the new client classes, configure events are handled differently. Instead of blocking configure events, we try to send them as late as possible. Delaying configure events will let us merge changeMaximize() for X11 clients and Wayland clients and it also fixes the bug where we don't send the final configure event when user has finished resizing a window.
Given that configure events are not sent immediately, XdgSurfaceClient keeps the last requested frame geometry and the last requested client geometry