I discovered that function pointers inside a RecordType that had
its type-determination done in a function whose signature matched
said function pointer resulted in the function pointer type being
emitted empty. This resulted in information being lost that is
interesting to certain optimizations.
See: https://godbolt.org/g/EegViY
This patch accomplishes this in 2 different situations:
1- When the function itself is being emitted, first convert all
the return/parameter types to ensure that they are available when completing the function type. This should not result in any additional work besides completing parameter types that previously were not completed.
2- When the function type is being evaluated, defer conversion of the record
type until it is no longer dependent.