go/ir: rebuild fake exits after optimizing blocks
go/ir: rebuild fake exits after optimizing blocks

Block optimization can remove blocks, which means we need to recompute
fake exits to be able to build a post-dominator tree.

Before this change, building the IR form of the following program
caused a panic:

	package pkg

	import (
		"syscall"
	)

	func fn() {
		if true {
			syscall.Exit(1)
		} else {
			_ = 0
		}
		var err error
		if err != nil {
			return
		}
		for {
		}
	}

Closes gh-882

dominikh/go-tools,dominikh/go-tools,dominikh/go-tools,dominikh/go-tools