The TypeOutlives struct has the job of βloweringβ a T: 'a
obligation into a series of 'a: 'b constraints and βverifysβ, as
described on the module comment. The final constraints are emitted
via a βdelegateβ of type D β this is usually the infcx, which
accrues them into the region_obligations code, but for NLL we
use something else.