[server] Cache the state of synchronized sub surfaces
When committing the state of a sub-surface, the state should not be immediately applied if the sub-surface is in synchronized mode. Instead it should be cached and only applied after the parent surface's state is applied. To implement this the Surface::Private has now a third cached state buffer. When committing the state is either swapped between pending and current or pending and subSurfacePending. Once the parent state is applied the state is swapped between subSurfacePending and current. The logic for applying state changes is changed. Instead of copying the complete state object, the individual state changes are now copied and the source gets completely reset to default values. Only the children tree is copied back, as that list needs to be modified.