Shader system

Kind of still work in progress. See comments in programlib_phong.js. But usable.
How often will this allocate? This vector isn't leaked is it? It's stored on the material? Just want to check we're not allocating often because Vec4s (Float32Arrays) are very slow to create.