Program parameters revamp

This PR re-implements shader parameter internals, while leaving the interface the same. It provides safer interfaces, and also has a serializable `ParamDictionary` that can be loaded from external sources.

Closes #150
Yes, it is supposed to be a serializable shader parameter structure. Not sure what example I can use this in. So far `triangle` doesn't have any parameters but is already overloaded by selecting glfw/gl-init, while `cube` shows of the standard shader parameter derivation (via `#[shader_param]`). Putting this in a test is not straightforward either, since parameter linkage requires a loaded shader program...