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.
The way its implemented now (line 1088) it can't be simplified with the builtin simplifier because there is no single expression for size_id, it is computed with several steps. However, I could simplify the condition and test for constant true/false manually, I'll do that now.