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
Let's see, select(x > c, 2*x, 3*x); is piecewise linear in x (disqualified in this PR), but select(q, 2*x, 3*x) is linear, i.e. q is not in terms of x. If the condition_order is linear or greater, the expression should be disqualified- which it would be by a cast<bool> of something in terms of x.  

There is a separate bug that the Cast visitor disqualifies expressions that cast to types other than float--even if they are constant with respect to the loop variables.