Perform simplification for floor/ceil/round/trunc

- constant folding
- simplify repeated application of integer-valued functions
Correctly handle vector types for builtins and div
Explicitly truncate when doing float->int casts in GLSL

This is for cases where both values are represented using "float"
variables. For example, for uint8->float casts, we can optimize away the cast,
but for float->uint8 casts, we have to perform an explicit truncation because
both types are mapped to "float" in GLSL.
Make GLSL version of lerp (more) compatible with CPU implementation
Fix unit test
Add more unit tests for GLSL codegen and math functions
Fix unit test
Fix bug where tracing interfered with bounds inference.
Added assertion
Fix several smaller issues
Merge pull request #497 from halide/floor_ceil_optimization

Perform simplification for floor/ceil/round/trunc
Merge pull request #498 from halide/better_glsl_vectorization

Improve codegen for GLSL
Build fix.
Fix minor bug in CSE.

Use counts are not transitive. E.g in (x*x + 1) + (x*x + 1), (x*x + 1) is
used twice, x*x is used once (not twice), because once we pull x*x + 1 into
a let, there will only be one x*x.

But use counts should be transitive for exprs we're not going to
extract as a let! E.g, in the above example, if we're not going to pull
x*x + 1 out as a let, then we should treat x*x as having a use count of 2!

So I've separate the use_count tracking from the global numbering, and made
exprs for which should_extract = false transitively increment the use_counts
of their children.
Clarify row-major vs column major in tutorials.
Fixed bug preventing gpu_tile from being used on a mix of Var and RVar.
Add Param::is_explicit_name()

This is mainly useful for certain use cases on the Generator branch,
where it is sometimes desirable to ensure that a Param is given an
explicit name (vs auto generated).
Remove -static-libstdc++ -static-libgcc
Merge pull request #513 from halide/is_autogen

Add Param::is_explicit_name()
merge