Use resolver visitor instead of context optimizer
Use resolver visitor instead of context optimizer

Summary:
The context optimizer is just too slow to use for this pass. Instead, let's use the resolver_visitor, which is much faster but does not actually fully resolve things.

Since things will not be fully resolved, we need to take some extra care to get comparable behavior. In the proceeding diffs I:
1. Disable errors in the post-inference pass on tvars with lower bounds that come from outside of the implicit instantiation but no concrete bounds. If everything was fully resolved those would have been `any`, so I resolve to that instead.
2. Handle non-termination when traversing tvars. `merge_upper_bounds` is recursive, so there is a diff that will keep alround a "seen" tvar set and bail on cycles.

Reviewed By: SamChou19815

Differential Revision: D40027342

fbshipit-source-id: d814bba00c0b1bfe32de785d2bb00cde14ef59f0

facebook/flow,facebook/flow,facebook/flow,mroch/flow,mroch/flow,mroch/flow,facebook/flow,facebook/flow,mroch/flow,mroch/flow,facebook/flow,mroch/flow,mroch/flow,facebook/flow