Environment module

TODO:
- [X] Basic environment module
- [X] Shortcut construction
- [X] Environment handle safety
- [X] Uniform matching and binding
- [X] Uniform blocks binding
- [X] Raw buffers construction and update
- [ ] Reduce uniform value size (current is 68 due to the fixed-size matrix)
- [x] Check uniform semantics on bind / shortcut construction
- [ ] Pass the whole structure when updating a uniform block (optional for this PR)

Fixes #19

This PR introduces the program environment struct (`envir::Storage`) that is filled in by the user, and serves as a source of data for program parameters.