The new shader parameter system

Closes #19
These expressions and some of the ones above could use some whitespace around the operators - it's "proper" Rust style and a lot easier to read IMO.