Prevent inlining of lots of stuff into user code.

By a mix of moving code into .cpp files, and marking things as NO_INLINE
where that wasn't possible.

The reason to do this is related to error messages. If we don't have a
clear function call boundary where we leave libHalide and the Halide
namespace, error messages can be misattributed to lines in Halide.h
instead of the line in the user code, because parts of Halide.h have
been copy-pasted into user code, which pulls it out of the Halide
namespace from DWARF's point of view.

In future, all code that might be called by a user must either
immediately enter a cpp file, or must be marked NO_INLINE.

There seems to be no performance hit from this change, and it makes
Halide.h slightly smaller, which is nice.
Error message fix.
Better automagic naming for params, images, and buffers.

Now tolerant of templated types
Error message tweaks.
Can now throw exceptions on error.

Disabled by default. Compile with WITH_EXCEPTIONS=1 to enable.

Works for compilation errors and runtime errors.

See test/correctness/exception.cpp for examples
Made introspection conditionally enabled.

Enabled by default. Use WITH_INTROSPECTION="" to turn off.