Everything on the wl_surface is double buffered.
When we create an XdgShell toplevel or popup we shouldn't treat it as
attached until it's committed to the surface.
A client should commit the surface after it's sent it's initial state of
the Xdg topLevel; minimumSize, title, app_id, etc.
By delaying init we will have the intial state correct to apply rules
and more correct geometry and everything is more atomic.
It's WIP because it breaks a lot of (arguably incorrect) unit tests -
and because I need to go through init() and make sure we load the
initial state of everything as well as connecting the signals.
Uploading now because zzag has a patch pending for applying rules
which relies on correct initial state.
Arguably this applies to WlShellSurface too, but I've left it unchanged
as it's deprecated and hard to verify real client behaviour.