Add a pass that dynamically skips stages (produce/update nodes).

We can add IfThenElses to skip stages where all uses are guarded by a
select on a constant-for-the-lifetime-of-this-realization condition. Values
from these realizations will still be loaded (e.g. due to vector selects),
so the allocations remain, but the values stored there no longer need to be
correct (or even initialized).

This buys you computing something only at some pixels (e.g. sift descriptor).
See the lazy_convolution test for that use case.

It also can turn off entire pipeline stages. See the skip_stages test for
that usage.

It can also turn things on and off at tile granularity, but this relies
on the simplifier being able to detect that the indices within the tiles
really don't affect the condition, and that the condition is therefore
constant across the tile. This is hard and may fail in non-trivial cases.
See process_some_tiles for this use case.
Merge branch 'master' into skip_stages
Fix side effects test to have a dependence on all results from extern call

Otherwise llvm is clever and only does the last one.
Move all allocas to the top of the function

This means we don't need to do explicit stacksave/stackrestore. This makes
foo.compute_at(bar, x) faster, because it includes less stack-related junk.
Allow multiple reduction definitions on a function.

This lets you write multi-pass reductions. They are executed in the order
defined. You schedule them by calling Func::update(int pass).

Also removed the requirement for reduction definitions to reference an RDom.
A reduction without an RDom is equivalent to a zero-dimensional RDom. E.g.
the following monster is a legal Func definition now:

f(x) = x;
f(3) = 7; // No RDom
RDom r(0, 10);
f(r) = r+10;
f(10+r) = r+20; // Reuse r
RDom r2(5, 2);
f(r2) *= r2; // Also use a new RDom
Merge branch 'master' into skip_stages
Merge branch 'master' into multi_pass_reductions
Merge branch 'skip_stages'
Merge branch 'multi_pass_reductions'