librustc: Use separate stack slot for each return.
Reenable ignored test and add run-pass test.
librustc: Add an intrinsic to retrieve the return pointer of a function.

This is needed for some GC stuff in Servo.
librustc: Don't allow return_address intrinsic in functions that don't use an out pointer.
librustc: Don't use Load/Store for structural values.
librustc: Don't use an alloca per return if the function doesn't have nested returns.
auto merge of #16081 : luqmana/rust/nr, r=pcwalton

Fixes #15763