Fix VS 2012 build (unsupported nearbyinf, truncf)
Added a linear solver, which can mutate equality or inequality expressions such that a chosen variable will appear alone on the left hand side. This is used extensively in the specialize_branched_loops optimization pass.
Remove compiler specific preprocessor directives
Vectorize game_of_life with pnacl

Required converting an int8 -> int32 cast to scalar code
Changed linear solver to use expr_uses_vars function rather than a custom version of the same. Minor style tweaks as well.
Merged the logic for dealing with equality vs. inequality comparison nodes in the linear solver. Also, address some minor style issues raised in the pull request.
Merge pull request #540 from halide/linear_solver

Added a linear solver mutator.
Added LinearSolve.h/cpp to CMake build.
Changed expr_uses_vars back to using a custom visitor. This is because we need to dive into bound variables from the linear solvers scope, so the visitor in ExprUsesVars is not sufficient.
Add EXPORT qualifiers
Added an optional scope argument to expr_uses_var(s). This allows the user to pass in a scope of exprs bound to variables, e.g. from let expressions. The visitor will dive into the bound expressions, whenever a variable in scope is encountered.
Merge branch 'scoped_expr_uses_vars' into linear_solver
After merging in scoped_expr_uses_vars branch, changed has_vars method to use expr_uses_vars and deleted custom visitor.
Added comments to the new versions of expr_uses_var(s). Added EXPORT macros to expr_uses_var for Windows support.
Added EXPORT macro to linear solver functions. Grouped comments and made them readable by doxygen.
Merge pull request #545 from halide/scoped_expr_uses_vars

Added an optional scope argument to expr_uses_var(s).
Added BranchUtils.h/.cpp files that contain several visitors and mutators used by the specialize_branched_loops optimization pass. I have pulled this work out into its own file to improve the readability of the specialize_branched_loops stuff, and make it easier to test and review these components.
Fix store collector for upsample pattern

The store collector was bailing out when it found too many stores,
rather than only considering the first few. e.g:

f[ramp(a, 2, 4)] = ...
f[ramp(a+1, 2, 4)] = ...
f[ramp(b, 2, 4)] = ...
f[ramp(b+1, 2, 4)] = ...

can be rewritten into two interleaving stores, but the store collector
was finding four stores and bailing entirely.
Merge pull request #534 from pgec/VS2012_build_fix

Fix VS 2012 build
Fixed compile errors in BranchUtils. Added the beginnings of a correctness test to check the validity of the functions in BranchUtils.