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
index on master: bf135f8 Merge pull request #502 from halide/split_rvar_bounds
On master: isnan
Add Generator and support code.
Fix bug where tracing interfered with bounds inference.
Add documentation, misc cleanup
Minor Fixes
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.
numeric_limits::min -> lowest, plus clang-format on all added files
set() should actually set the value.