WIP: Make struct passing work properly #3466

this is a first cut at rebasing #3466 onto master. @Keno let me know if you see anything that looks wrong.

Marked WIP, since I have not tested it on windows yet. (only linux 32/64 and mac 64)

To keep track of issues (from comments) from the previous PR:

 - [ ] Need to add link to LDC
 - [ ] Need to figure out what to do with fixed-size arrays.

:negative_squared_cross_mark: