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
Talk to the C standard committee. The C stdlib <string.h> does not define the "const char*" version of strstr, that version is only part of C++. This declaration happens to work because it is in an extern "C" block and the "strstr" symbol is defined (although with a non-const declaration in the actual header).

The mismatched declaration causes a problem if you include other C library headers in the runtime for debugging, because then we end up with two extern "C" functions that are declared to have different return types (this bogus declaration in runtime_internal.h and the real one in the C library header).