Fix a bug with multiple outputs from an external array function
not compiling because of a mismatch in the name used for the bounds
representing the entire output Tuple.

Added a test case for to catch this failure.
Re-enabled ability to control default jit target features from environment.

Use HL_JIT_TARGET. The host, arch, and os must match the host target.

This means the nightly tests actually test different feature sets again
(e.g. no avx, cuda).
Fixed saving Image<signed integer type>
Overhaul of binary tracing to support post-mortem trace analysis.

Fixed bug causing trace files to be ridiculously huge. They're still large.

Every trace event has a parent id. The trace function returns an integer to
use as a parent id for child events. This helps disambiguate loads/stores
to different realizations of the same func occuring in different threads.

There's the start of a trace analysis tool checked in.
Merge branch 'master' of github.com:halide/Halide

Conflicts:
	src/CodeGen.cpp
	src/Func.h
	src/JITCompiledModule.cpp
	src/JITCompiledModule.h
	src/runtime/HalideRuntime.h
	src/runtime/tracing.cpp
	test/correctness/autotune_bug_2.cpp
	test/correctness/autotune_bug_3.cpp
	test/correctness/autotune_bug_4.cpp
	test/correctness/tracing.cpp
	test/correctness/tracing_stack.cpp
Merge branch 'master' into rvar_reorder
Rework of bounds inference:

- The unit for bounds inference is now stages instead of functions. A pure
function has one stage, a function with three update steps has four stages,
etc. This means there are no more hacks related to recursive bounds in update
steps.

- Bounds required of a stage are given by analysis on the graph of
functions, ignoring scheduling concerns.

- Bounds computed of a stage are determined by analyzing the lowered
code within each loop level of that stage's production. Things like fuse,
splits followed by reorder, etc, make it too hard to do this analytically.

- Bounds allocated for a realization are computed by analyzing the lowered
code.

- All tracking is done in terms of min/max instead of min/extent, which is what
makes this approach tractable.

This also removes the whole min_extent_computed nonsense, which was required
because the previous method tried to avoid analyzing lowered code.

Still todo:

- Extern stages are broken completely by this change.

- Sliding reductions only check that the final stage required slides. Values
may have been clobbered by earlier stages.