Added ability for Funcs to return multiple outputs (Tuples).

Tuples are not first-class types. Instead, Function objects have an array
of value Exprs instead of just one. Provide nodes therefore now take
an array of values, and call nodes have an extra int selecting which value
from the call this Expr refers to. Realize nodes now take an array of Types.

The storage flattening pass is now also responsible for unpacking the
multi-valued provide into multiple store statements, and for converting
the realize nodes into multiple nested allocate nodes. Each element of the
tuple gets its own buffer_t. I.e. things are stored in struct-of-arrays
format.

One example of why this functionality is necessary is multi-dimensional
argmax. It was not possible to express before this.

The semantics aren't quite right yet though, All tuple elements should be
computed before any are stored (to avoid RAW hazards in reductions), but this
is not yet the case (see the TODO in StorageFlattening).

Also, you can't realize multi-valued Funcs yet. There's some front-end
plumbing necessary first.
llvm trunk no longer has TargetOptions::RealignStack

It's now a Function attribute. Seems to be on by default.
Merge branch 'master' of github.com:halide/Halide