Interleave vertex attributes into a single buffer for more efficient drawing

Interleaved buffer is kept on the GPU alongside the usual buffers to
maintain current API flexibility. Interleaving will be lost if
setPositions, setNormals etc. is called, based on the assumption that
repeatedly reconstructing the interleaved buffer would cost more
performance than would be gained by keeping it around.
Cache custom uniform's values to avoid setting them redundantly

Optimization is applied only to uniforms whose value is of type number in
JS. Extending this to vector and matrix uniforms would be possible, but
the returns are smaller.
Check that interleavedBuf exists before dirtying it
Merge pull request #306 from NVIDIA/vertex-data-packing-optimization

Vertex data packing optimization
Merge pull request #305 from NVIDIA/custom-uniform-optimization

Cache custom uniforms values to avoid setting them redundantly
Fresh build featuring array interleaving optimization from NVIDIA