Renderthread shader module and it's GL implementation

#### Not ready yet! Opened to preview and get feedback.

This PR introduces proper data types and structures to hold all shader meta information. This is supposed to be stored on the renderthread side. When a draw call is issued, the data provided in vertex attributes and shader parameter is to be matched against the requirements described in ```ProgramMeta``` structure. This meta data covers all essential bits, like: vertex attributes, default block uniforms, uniform blocks, and samplers.

On of the big features is the unified variable type (```VarType```), which is used to describe both attributes and uniforms. The derivation of it for the GL attribute is implemented in ```derive_attribute```. The PR will be considered semi-complete when all the fields of ```ProgramMeta``` are initialized properly by querying GL data about the program.