Merge GLES and OpenGL rendering code

Summary

For GSoC 23, the final goal of my project is to run Splash on the Pi. This has already been achieved using OpenGL ES on a separate branch and now it's the time to tie the bow and wrap everything into a neat API. Both OpenGL and OpenGL ES share a lot of similar code, except for a few lines of API specific code. It's needed to unify this code into an API to allow the user to switch rendering backends at run-time, and hopefully allow other rendering APIs (Vulkan, etc) to be implemented in the future.

Note that work on this issue has already started in !618 (merged).

How would you like the feature to work ?

As it sits in my mind right now, my idea of how the API looks is as such:

- Renderer
  - OpenGLRenderer
  - GLESRenderer
  - Renderer::createTexture()
  - Renderer::createShader() 
 
- Texture
  - OpenGLTexture
  - GLESTexture

etc..

Why is this feature important to you ?

This issue should allow splash to run on the raspberry Pi 4 as well as desktop platforms in one binary, allowing users to switch depending on their needs, and allowing for easier distribution without the need for separate binaries for OpenGL and OpenGL ES.

Impact of non completion

If this issue is not completed, splash code will remain fragmented into two branches that must be maintained and distributed separately.

Edited by Tarek Yasser