SI-7006 Move unreachable block analysis under optimization

This commit makes the unreachable block analysis run only under
-optimise. To deal with most of the unreachable code that it eliminated
this commit makes GenICode prevent the generation of most unreachable
blocks. The new unreachable block prevention code can be disabled with a
compiler flag.

A test is included to make sure unreachable code doesn't cause issues
in code gen.