Add much more robust transitive error code checking.
Add much more robust transitive error code checking.

Now, if the return value for a basic block is a call instruction (the
result of some callee), we only mark it as a transitive error if the
error hasn't already been checked.  For example:

> bs = read(..);
> if(bs < 0) {
>   setError(..);
>   return -20;
> }
>
> return bs;

Before, this function could be marked as transitively returning -1 as
an error, even though it cannot.  The -1 case is handled in the
conditional and only non-error values can be in @bs@.

travitch/foreign-inference,travitch/foreign-inference