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
Add explicit let statements for the value of the unsplit vars.
Fix bounds computed for split reduction domains.

(bug #464)
Skip adding bounds inference lets at loop levels with no pipelines.

Saves compile time in theory, and makes the IR easier to read.
Add more tests.
Merge branch 'master' into split_rvar_bounds
Merge branch 'master' into split_rvar_bounds
Comment cleanups.
Merge pull request #502 from halide/split_rvar_bounds

Split rvar bounds
Corrected results output in the memcpy test
index on master: bf135f8 Merge pull request #502 from halide/split_rvar_bounds
On master: isnan
Merge pull request #505 from white-pony/memcpy

Corrected results output in the memcpy test
Param<void *>(void *) constructor was triggering instead of Param<void *>(string) for Param<void *>(" __user_context\)