Add an error summary (ret -1) for ioctl
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.
Newline
Bugfix in the rewrite of the error handling analysis

Now require candidate blocks for the known error handling case to
have only a single predecessor.  This was the intent before but I
forgot to actually check the condition.

Additionally, this change corrects the error summaries for fread and
fwrite.  We do not actually have summaries for these functions because
they do not really return error codes.  Instead, users hoping to catch
stdio errors have to call ferror.  I added a summary for that function
and corrected the expected results of the relevant tests.

Those tests were basically incorrect before.
Remove an obsolete (incorrect) comment
Clean up an ugly nested pattern match
Update some documentation and note an odd case
Remove some duplicated code

Also add a cleaner implementation for retValToConstantInt
Remove some duplicated code
Remove an obsolete comment

This information is now addressed in the immediately-following
callee.
Remove an unused return value

Not only was it unused, but it was basically a gross anonymous
Bool whose purpose was slightly unclear.  Luckily the code using
it is now gone.