Major iteration on our shader parameters

I was going to do another major step with the associated items, which is mostly orthogonal. I don't mind doing it as a part of this CL, but merging this is backwards compatible thus safe anyway.

Fixes #302
Partially solves #312 
Also, deprecates `#[unused]`
AFAIK, this architectural change leaves much less room for this code to fail. By using `ShaderParam` trait it is only possible to screw up `upload_parameters` if you implemented it yourself (not used `shader_param`). We could still return an error here, of course, instead of asserting. The important thing is - the following code will not crash, thus it's not a critical error. Maybe we should just change assertions to `error!` and be good with it.