added support for most basic primitives as uniforms

Also removed the Mat3, Mat4, etc. interfaces as we are going to make
some big assumptions based on the Kind of types instead, such as that
`[9]float32` is a 3x3 matrix. There are a few issues, like a 2x2 matrix
is indistinguishable from a vec4, so we don't support 2x2 matrices at
the moment. Same story for 4x3 vs 3x4 matrices. In the future we could
do more with struct tags for these cases.

ref #4