matrix: vec3 type and .set() method for vectors
matrix: tidy things a bit, add vec[34].{length,dot}()
matrix: more stuff
shaders/effects: allow #defines to be passed in at compilation

- Effects may be invoked by effectname+FOO+BAR which will cause
  #define FOO
  #define BAR
  to be inserted into the shader source after the common and global parts
- *Shader::load() takes a second defines paramter to make this happen