In ReturnSynthesizer add better support for RecordType.

When we dectect that the last expression is a record type and is not
a temporary, we now return it by reference, hence avoiding an unnecessary
and sometimes impossible (cout) copy.   If it is a temporary we still
return a 'copy'.
We must have a function implementation to take its address