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.