Prevent removal of initialization for runtime types

This patch fixes a bug where a reduction on an array of runtime types would result in a runtime segfault. This segfault occurred because a runtime type variable was not initialized properly.

The new test is small example of such a case, where the reduction needs runtime type information about the associative domain of integers.

The compiler would add a call to initialize this variable, but the parent block would later be removed. This patch to the compiler modifies such a block so that it won't be removed.

- [x] Single node testing
- [x] Gasnet testing
I think it would be good to be a bit more aggressive here, using asserts rather than ifs to ascertain that the tree is in the expected state.  If it happens to look different from what we expect, then the block tag update will fail and the same bug will resurface.  Better to fail during compilation than to allow a run-time error to surface mysteriously later....