Add support for writing out lowered .stmt form of Halide code for
debugging and schedule analysis.
Add a header file for user visible overridable and callable routines
in the Halide runtime. Purpose is two fold: to give prototypes for
overriding and calling these routines and to provide Doxygen
documentation on them.
blur no longer requires HL_DISABLE_BOUNDS_CHECK
Slightly more debugging output in Bounds.cpp
Resoect constraints when defining bounds of the output.
Added ability to query pipelines about bounds inference information.

If you pass in a buffer with a host and dev pointer of NULL, instead of
running the pipeline it will populate that buffer with appropriate sizes,
strides, and mins. It attempts to satisfy both the required region and
also any constraints. It also respects expansion due to vectorization, etc.

It does this by computing the required region, then passing it through the
constraints, and then checking the bounds again. This can be tricky with
recursive constraints. Say you have a constraint that the width must be a
multiple of four. If you want to use this feature, you should express your
constraint like so:

im.set_bounds(0, 0, ((im.extent(0)+3)/4)*4);

Note that passing a required extent through this expression will round it
*up*.

Doing the following:

im.set_bounds(0, 0, (im.extent(0)/4)*4);

will trigger an error during the bounds inference phase, because it will
compute the required extent, round it down to the nearest multiple of four,
and then do the bounds check again. Constraining things to be constants,
which is the common case, will work fine (and will check those constants
against the required regions for you).

In some cases the inference routine will give you results that won't pass
the constraints (or the bounds tests), and it also won't throw an error until
runtime. For example:

im1.set_bounds(0, 0, im2.extent(0));
im2.set_bounds(0, 0, im1.extent(1));

If you're doing simultaneous bounds inference for im1 and im2, this will
set the width of im1 to the required width of im2, and the width of im2
to the required height of im1. The width of im1 and im2 probably no longer
match after this, so the first constraint will fail when you run the pipeline.

Solving this problem in the general case requires solving arbitrary systems of
nonlinear equations (or statically proving that there is no solution). You
can, for example, encode a constraint that provides a counter-example to
Fermat's last theorem. Bounds inference isn't going to disprove Fermat's last
theorem for you by finding a solution. It's not even going to try.
Merge branch 'master' of github.com:halide/Halide
Merge branch master of halide/Halide