Refactor ShaderVariable initialization to a more general approach

The new method should allow VertexAttrib location binding before linking the program and clean up the way transform feedback outputs are handled.
Fix comments
Major overhaul of Shader handling and implementation of VertexArray

Add wrapper to vertex array object and move attribute binding from VertexAttrib to VertexArray.
Use proper system exceptions or supply custom types when suitable.
Move less used types into own namespaces.
Update README.md
Rename ShaderVariable to ProgramVariable

Fix compute program work group size retrieval.
Simplify VertexAttrib default usage.
Merge branch 'develop'

Fix conflicts with TextureGridExample