Strandborg/glslfixes

Implements a new optimization stage that detects if vector components are only used separately, and never as part of whole vector operation (or a swizzle with more than 1 component). In such cases, separates the components to separate components to enable further optimization by other stages (dead code elimination, loop unrolling etc). Also, makes it easier to emit canonical for loops to make WebGL happy.