Finer categorization of branch instructions

Previously, branches were broken down into "good" branches
(unconditional and direct), "bad" branches (conditional or indirect),
or "other" branches (anything else, typically related to exception
handling).  In this revision, branches are categorized as
"unconditional and direct", "conditional", "unconditional but
indirect", "multi-target" (i.e., switch statements), or "other".
Distinguish between "real" and "fake" unconditional branches
Improved the definitions of the different unconditional branch types

An unconditional branch is defined as "removable" if and only if it is
the only unconditional branch to its successor.  Otherwise, it is
defined as "mandatory".