Significant rewrite of a chunk of the ErrorHandling analysis
Significant rewrite of a chunk of the ErrorHandling analysis

The case dealing with conditions that handle known errors from called
functions is now much simpler.  It starts from basic blocks that return
a constant int and searches backwards to function return value
comparisons. Before, it started from function calls whose return
values are checked.  This was more complicated because then the analysis
had to explore forward and find all blocks in the branch that could
be returning constant int values.

This change also fixes a significant bug where only one possible return
value from a callee would be considered as the "error reporting" code.
Not quite sure how that happened initially.

travitch/foreign-inference,travitch/foreign-inference