Function DeleteDeadBlock requires that all predecessors of a block
being deleted have already been deleted, with the exception of a
single-block loop. When we use it for removal of dead subloops that
contain more than one block, we may not fulfull this requirement and
fail an assertion.
This patch replaces invocation of DeleteDeadBlock with a generalized
version DeleteDeadBlocks that is able to deal with multiple dead blocks,
even if they contain some cycles.