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
I am concerned about this hiding internal mutability. Could these be taken as `&mut ParamValues` in function parameters instead? And make these `&'a [Option<dev::UniformValue>]`