Experimental varargs fix

As the title says, this is an **experimental** fix for the varargs horror (see https://github.com/ldc-developers/ldc/issues/702, https://github.com/ldc-developers/ldc/issues/172, https://github.com/ldc-developers/ldc/issues/73 and https://github.com/ldc-developers/druntime/pull/14).
It seems to be working fine on Win64 in combination with the ```core.vararg``` and ```core.stdc.stdarg``` patches from https://github.com/ldc-developers/druntime/pull/14.
Okay, turns out there is more to it than I noticed while just scanning through the diff and noticing that line. Unless I'm completely mistaken (it's been some time since I last looked at the AMD64 ABI spec), the integer rewrite generally isn't correct here at all. For example, `struct A { double a; }` is supposed to be passed in a floating point register, not casted to an integer.