Compress Primitive normals

For #1628.

Primitive normals are compressed using oct encoding and packed into floats. If the geometry has any combination of the following vertex attributes: texture coordinates, normal, tangent and binormal, they will all be packed into a single vec4 attribute.
It doesn't compress the texture coordinates yet because oct encoding only works on unit vectors. I'm working on a way to compress them, but, you're right, there could be artifacts depending on the size of the texture. Anyway, I agree. I'll change the name.