Introduction of the Context and Backend class and the OpenGL version: the GLBackend

- Add the gpu/Context files containing:
    - gpu::Context class the encapsulation of the graphics api where the Batch can be enqueued
    - gpu::Backend the abstract class that actually implement all the rendering of the Batch commands.
    A Context contains a Backend which is where the Batch command are beeing executed 

- Add the gpu/GLBackend files containing:
    - gpu::GLBackend the GL specialization of the gpu::Backend

The Buffer class got cleaned and now doesn't need to know anything about OpenGL. It only carries a "Backend::GPUObject*" which is where is stored the specialized set of data required for a given Backend to use the Buffer with the graphics api. In the the case of GLBackend, the real GLuint buffer object.

- Added a few "PROFILE_RANGE()" macro to check overall performances using the Nsight tool on Window



The non-static Backend::syncGPUObject() is declared but never implemented.  What is not obvious is that it has no relationship with static GLBackend::syncGPUObject().

This doesn't block the merge, but I point it out as a point of possible confusion.

Further musings... since Backend has no virtual functions and does not impose any API requirements on GLBackend one wonders why even declare the Backend base class?  I guess the answer is that it is declared to be a friend of class Resource, which is enough to justify Backend as an API.  Also, perhaps there are future plans for adding stuff to Backend that GLBackend will inherit?