Allow extern stages to increase their output size (#273)

Bounds inference now operates in three stages at each level:

1) Do a bounds query with the required output size to
get the upgraded output size

2) Shift this region to lie within the output region from the bounds
query one loop level up. This is important in case one of our inputs
is compute_at a higher level (e.g. compute_root()). The amount we asked
it to compute previously must still be valid. This is very similar to
the behavior where the last span in a split loop gets pushed leftwards.

3) Do a bounds query again with the shifted region to determine the
input bounds.

It's not perfect - if the extern stage doesn't accept the shifted over
output region as a valid output region then you're going to get a runtime
error. It should work if the extern stage was generated by Halide though.
For Halide-generated stuff, rounding-up behavior is shift-invariant.

It also works in the case where you want to round the boundaries to a
multiple of something, as the output region at the higher loop level
will be aligned in the same way, so pushing things inwards will maintain
the alignment.
Easier-to-read printing of extract_buffer_* intrinsics.
Fix GPU and extern stages sharing a single .buffer in the symbol table