shaders require VAO and VBO in GL 3.2

Introduce resource references for buffers and vertex arrays.

These objects are unique resource references, and only support moving
semantics.

Also introduce With...Scope objects, to activate/enable various
states (program, buffers, blending mode) easily.
asynch loading of shaders from filesystem

Move fragment + vertex shaders into separate files.

- Shaders are loaded asynchronously. The IO part is done in a background
thread, and - the shader definition done in a task of the display
thread.

- split shader loader away from main.cpp