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.
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.