Make int/ptr return distinction, start resolving function pointers.
Make int/ptr return distinction, start resolving function pointers.

The int/ptr distinction is important to keep pointer return values (0)
from mixing with int return values (errors are usually non-zero).

Resolving function pointers is extremely important, especially for
sqlite.  This required some extensions to the indirect call resolver.
Additionally, relies on recent changes to the BlockReturnValue
analysis to report multiple possible return values for a block (which
we only use if they are all constant ints).

The indirect call handling isn't complete - it needs a story for
handling indirect calls with more than one possible target.

travitch/foreign-inference,travitch/foreign-inference