Walk choice kit tvars in the type visitor
Walk choice kit tvars in the type visitor

Summary:
The `id` in a `FullyResolveType` constraint is both an index into the evaluated
map and also a key in the type graph, which points to dependencies/dependents
that are also indexes into the evaluated map (and recursively keys in the type
graph).

The `id` in an `EvalDestructor` constraint points to a tvar. Specifically, it
points to the tvar of an `AnnotT` that appeared in a type destructor.

In addition to adding these cases, I also moved some code from nested match
expressions into private methods. I also reused the existing `type_map` method
in a position where it's body was duplicated.

Reviewed By: avikchaudhuri

Differential Revision: D5888065

fbshipit-source-id: 568f4ed325f6c188fe542b9ac605622e9c395b4b

AgentME/flow,popham/flow,gabelevi/flow,TiddoLangerak/flow,JonathanUsername/flow,claudiopro/flow,jamesgpearce/flow,JonathanUsername/flow,facebook/flow,nmote/flow,gabelevi/flow,samwgoldman/flow,jamesgpearce/flow,JonathanUsername/flow,mroch/flow,gabelevi/flow,samwgoldman/flow,jamesgpearce/flow,TiddoLangerak/flow,popham/flow,claudiopro/flow,nmote/flow,jamesgpearce/flow,popham/flow,nmote/flow,samwgoldman/flow,gabelevi/flow,mroch/flow,JonathanUsername/flow,gabelevi/flow,mroch/flow,ylu1317/flow,TiddoLangerak/flow,AgentME/flow,mroch/flow,samwgoldman/flow,ylu1317/flow,mroch/flow,claudiopro/flow,facebook/flow,mroch/flow,jamesgpearce/flow,AgentME/flow,JonathanUsername/flow,JonathanUsername/flow,nmote/flow,claudiopro/flow,AgentME/flow,facebook/flow,nmote/flow,samwgoldman/flow,facebook/flow,jamesgpearce/flow,samwgoldman/flow,facebook/flow,popham/flow,nmote/flow,TiddoLangerak/flow,popham/flow,gabelevi/flow,jamesgpearce/flow,JonathanUsername/flow,nmote/flow,claudiopro/flow,ylu1317/flow,gabelevi/flow,ylu1317/flow,TiddoLangerak/flow,popham/flow,mroch/flow,facebook/flow,ylu1317/flow,AgentME/flow,samwgoldman/flow,facebook/flow,popham/flow