moved tryKillUnused to GraphUtil
Add phase FlowSensitiveReductionPhase.

It is possible to remove GuardingPiNodes, CheckCastNodes, and FixedGuards during
HighTier under certain conditions (control-flow sensitive conditions).

The phase added in this commit (FlowSensitiveReductionPhase) does that,
and in addition replaces usages with "downcasting" PiNodes when possible
thus resulting in more precise object stamps (e.g., non-null).

Finally, usages of floating, side-effects free, expressions are also simplified
(as per control-flow sensitive conditions).

The newly added phase runs only during HighTier and can be deactivated
using Graal option FlowSensitiveReduction (it is active by default).

--HG--
extra : amend_source : d4db50907a3138b0eb42dc30717a9440b5a5ba7d
disabling flow-sensitive reductions until their issues are addressed
part 2, disabling flow-sensitive reductions
part 3, disabling flow-sensitive reductions