add function types to analysis machinery
Summary:
In this diff I am adding function types as a first class concept in the IFC machinery. This means pulling typing information out of the function prototypes and into a separate record type. The subtyping function now recognizes function types and computes subtype constraints where the arguments and pc are contravariant and the exceptions and return type are covariant. As a nice side benefit, this diff greatly simplifies the logic in `Ifc_solver` as we can just call the subtyping function instead of adding all the subtype constraints in an adhoc way.
I intentionally did not implement `add_dependencies` because it's a bit complicated and we don't need it yet. I will add this soon.
Reviewed By: madgen
Differential Revision:
D22867222
fbshipit-source-id:
a515a3b8042bc51052494a8c0e5d795228dfb7fe