add __c_long_double to support Win64 long double

I gave up on the idea of making a new basic type for  this, it turned out to be way too intrusive and disruptive. Instead, I created a special `__c_long_double` struct using D's wrapping capabilities. Then, the problem devolved into putting in special cases for the name mangling, and function call/return sequences.

After this is pulled, I'll add the alias to `core.stdc.config`:
```
alias __c_long_double c_long_double;
```
for Win64 only. If this works out, we'll do the same for `c_long` and `c_ulong`.
TYldouble?