Add declarations for Solaris to druntime.

This fixes all druntime issues except section definition.
Fix issue #795 — Struct dtor called twice under some circumstances
Merge pull request #799 from AlexeyProkhin/issue795

Fix issue #795 — Struct dtor called twice under some circumstances
Add more Solaris support to druntime and Phobos.
Fix and clean-up Win64 ABI
Experimental varargs fix
Win64 fix: pass 64-bit reals as doubles
Win64 fix: don't attempt to rewrite composites of size 0 to integers
Don't swap real and imaginary parts of complex numbers.

Rely on LLVM to select a sane order, don't use DMD as reference anymore.
Get rid of CfloatToInt ABI rewrite and extend CompositeToInt.

CompositeToInt now also accepts complex number pairs and all other types,
not just pointers to structs/static arrays.
Use single ByVal ABI rewrite for both Win64 and PPC.
Implement rewriteArgument() for PPC ABI.
Refactor Win64 ABI.

I've decided to use a consistent scheme here - types are returned the same
way as they are passed as arguments. So cfloat as 64-bit struct in RAX,
cdouble/creal and 80-bit real/ireal as types > 64 bit via sret.

MS allows using the x87 stack, but there are no official guidelines as
they don't use x87 at all.
Implement rewriteArgument() for Intrinsic ABI.
Daring, untested attempt to simplify the System V AMD64 ABI.

Rely on LLVM to assign the registers, for D linkage too.
Re-reverse parameter order for extern(D).
Re-implement __va_list struct allocation for System V AMD64 varargs ABI.
Rewrite suited structs/static arrays as integers for extern(C) too.
Get rid of obsolete TargetABI::newFunctionType() and doneWithFunctionType().
Fix System V AMD64 ABI and facilitate debugging.

Fix: void type's size isn't 0 and so must be filtered out in returnInArg()
before calling passByVal().