Draft: Introduce internal client buffer type
The goal of this change is to introduce the base client buffer class that can be shared between different surface types, which in its turn can be used to unify the "texture factory api" from client buffers.
Currently, hardware accelerated internal clients will create a frame buffer object per each frame. This means that when the outline window is shown, on every frame, a QOpenGLFramebufferObject will be allocated.
It's worth noting that creation of a framebuffer is not cheap as the driver needs to do quite a lot of work, e.g. do the actual memory allocation, verify the completeness of the framebuffer, etc. With this change, the framebuffer objects will be re-used, which can lead to performance improvements.
The ultimate goal is to bring kwaylandserver back to kwin and make them use the same client buffer infrastructure, both for internal windows and wayland protocols such as linux-dmabuf-v1.