Fix wchar and dchar C++ mangling

```d
extern(C++){
    void fc2(wchar){}
    void fc4(dchar){}
}
```

```
2.065 x86/x64
void fc2(wchar) ?fc2@@YAX_Y@Z ?
void fc4(dchar) ?fc4@@YAXK@Z  void __cdecl fc4(unsigned long)

2.066.0-rc2 x86
void fc2(wchar) ?fc2@@YAXG@Z  void __cdecl fc2(unsigned short)
void fc4(dchar) ?fc4@@YAX_Y@Z ?

2.066.0-rc2 x64
void fc2(wchar) ?fc2@@YAXG@Z  void __cdecl fc2(unsigned short)
void fc4(dchar) ?fc4@@YAX_W@Z void __cdecl fc4(wchar_t)

fixed
void fc2(wchar) ?fc2@@YAX_W@Z void __cdecl fc2(wchar_t)
void fc4(dchar) ?fc4@@YAX_K@Z void __cdecl fc4(unsigned __int64)
```

```
            C++         D
Windows:
    wchar_t       < >   wchar
    
    unsigned int  <     dchar


Linux:
    wchar_t        1>   dchar
                   2>   dchar
                   3>   uint
                   4>   (nothing)

    unsigned short<1    wchar
    (nothing)     <2
    unsigned short<3
    (nothing)     <4

    wchar_t       <1    dchar
    wchar_t       <2
    unsigned int  <3
    (nothing)     <4
```
1. interconversion of wchar_t(C++) and dchar(D), conversion wchar(D) to unsigned short(C++)
2. interconversion of wchar_t(C++) and dchar(D), can't conversion wchar(D)
3. conversion from wchar_t(C++) to uint(D), from wchar(D) to unsigned short(C++), from dchar(D) to unsigned int(C++)
4. can't conversion wchar_t(C++) and wchar(D) and dchar(D)

Which is best practice on Linux?
I think 1.
Because, wchar_t and dchar should the same on Linux. (UTF-32 each other)