GLSL Varying Attributes

The OpenGL GLSL target will run a Halide Func on a screen filling quad inside the fragment shader of a GLSL program. This branch adds passes during lowering and GLSL codegen to identify linear expressions that may be pulled out of the fragment shader. These expressions are evaluated per-vertex, as varying attributes, and then interpolated across the image by the GPU. The branch also contains changes to pack scalar parameters into vec4 uniform and varying attributes.

The code in this branch will interact with the specialized_branched_loops branch, to support piecewise linear expressions.  It will also interact with the upcoming GPU runtime API refactoring.

PTAL
Can you add a comment that explains the meaning of linearity for the condition? I understand that it works to do the right thing in every real world case, but I feel like that is more of a coincidence than anything else :)

Also, just to point out something mildly interesting that I realized when thinking about this: I think a lot of what this PR is doing is simply loop invariant code motion (when it moves constant expressions out of the GPU thread loop). 

I think we should consider writing our own code to lift invariant code out of loops, independent of this PR. I think we are mostly relying on LLVM to do this now, but, LLVM can't do this in the case of GPU or parallel loops. The benefit might be significant (but maybe not, I don't know).