Fix unsoundness bug with arithmetic and unresolved types
Summary:
Arithmetic is broken wrt unresolved-type arguments. For example, Hack thinks that
```
$x ==> $x + 1
```
has type `function(num):int` if the lambda is passed to a generic function.
To fix this, we revamp the type checker code for arithmetic, using `expand_type_and_narrow` to use the lower bound if possible, defaulting to `int`.
The original bug was due to `is_sub_type_LEGACY_DEPRECATED` returning `true` for type variables (e.g. a test of `#1 <: int` would return `true`).
Reviewed By: CatherineGasnier
Differential Revision:
D15780423
fbshipit-source-id:
d1e68e7cc633c6f3a7f15b3e6f195f04d828c4e7