Fix some issues relating to multiple update steps and tuples on gpus

The gpu code wasn't tracking tuples (because it was looking for buffers with
the same name as the pipeline node), and it wasn't correctly dealing with
multiple update steps that may alternate cpu/gpu.
Made jit tests use jit target (HL_JIT_TARGET).

It was inconsistent previously. Some did and some didn't.
Updated nightly test to not build ptx on os x

ptx should work on os x, but my build bot is a mac mini with no cuda gpu
Clean nacl apps before compiling them when testing
Standardize loop constructs in interpolate app
Warn if you forget to schedule an update step.

This caught two real bugs in the tests!

The exact test is: If any var-altering scheduling primitives are called
(split, vectorize, fuse, etc) on any stage. Then Func::update(foo) must
have been called for every update stage.

So this results in a warning:

  f(x, y) = x;
  f(x, y) += 1;

  f.vectorize(x, 4);

This does not:

  f(x, y) = x;
  f(x, y) += 1;

  f.vectorize(x, 4);
  f.update(); // I really intended to not schedule the update stage

This doesn't either, because often pure stages are trivial:

  f(x, y) = x;
  f(x, y) += 1;

  f.update().vectorize(x, 4);

This does:

  f(x, y) = x;
  f(x, y) += 1;
  f(x, y) *= 2;

  f.vectorize(x, 4);
  f.update(1).vectorize(x, 4);
  // Forgot to call f.update(0);

This does not:

  f(x, y) = x;
  f(x, y) += 1;
  // These calls apply to the entire function, not just the first stage.
  f.compute_root().bound(x, 0, 10).reorder_storage(y, x);
Fix bug in previous commit.
More general handling of the widen-then-narrow ops in ARM

Fixes #173
Fix bug in skip stages

Out of scope variables were sneaking into the condition via
replacing a for loop of extent one with its min during analysis.
Fix to SPIR backend for shared memory, but still crashes
Disable shared memory test for OpenCL until bugginess is resolved.
Handle abs intrinsic in codegen C

Also remove some pointless punctuation from generated source.
Remove assertion because it's invalid for older llvms
Add operator== and operator!= to Halide::Target.
Merge branch 'master' of https://github.com/halide/Halide

Conflicts:
	src/Target.h
parse_target_string() now considers arch-but-not-bits to be an error.

This has been promised to become an error (rather than a warning) for
some time now.
Merge pull request #261 from steven-johnson/master

parse_target_string() now considers arch-but-not-bits to be an error.
Add Target::to_string()/from_string()/merge_string()

Refactor parse_target_string() so that the core is in the new
Target::merge_string() method, allowing us to cleanly parse target
strings without starting from get_host_target(). parse_target_string()
is now implemented using merge_string(), and has the same semantics
*except* that the “host” token is now supported only in the first
position in the string.

Also added to_string() to allow roundtripping or debugging, and a new
test case for the methods.
change constant names in Target::to_string to match Halide conventions.
Merge pull request #262 from steven-johnson/master

Add Target::to_string()/from_string()/merge_string()