sound check
move fragment + vertex shaders into separate files
using std::async to perform io
asynchronous loading of shaders

now 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.