Explicit Allocate and Realize conditions

This pull request makes conditions associated with Realize and Allocate nodes explicit (instead of being predicates on one of the extent expressions or eliminating the extents completely).

This enables the GPU targets to learn the size of an allocation successfully even when the allocation has been conditionally eliminated, which resolves the issue mentioned in pull request #354.
Would be nice to resolve this before merge. I think src/runtime/tracing needs to change, as does util/HalideTrace