For every type there is a reason: ExactT
For every type there is a reason: ExactT

Summary:
There are a handful of types which don't have their own reason, but rather
inherit their reason from a wrapped type. This seems fine, but causes some
confusing behavior:

1. `reason_of_t` constructs new reasons whenever it is called based on the
wrapped type. Since reasons are used to break caches, creating new reasons
introduces an infinite recursion risk (like creating new tvars).

2. `mod_reason_of_t` returns a copy of the inner type with a modified reason.
It's not clear that this is always what we want, especially when the target
comes from a wildcard pattern match.

This stack of diffs changes all such types to have their own reasons. Doing this
requires care. The earlier behavior relied on nested `mod_reason_of_t` for error
positioning. Now nested types need to be repositioned explicitly when escaping
the wrapper.

Reviewed By: avikchaudhuri

Differential Revision: D4739194

fbshipit-source-id: 755767c99b9b648da387c70328317ba3f8f145a0

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