Charsetconverter UTF-32 fix

* Most common implementation of iconv (GNU libiconv) use big endian and BOM when output is UTF-32. Most other (but not all) iconv implementations usually works similar. To ensure that conversion will be correct, we need to explicitly specify output endianness. 

* On some platforms (FreeBSD) wchar_t isn't in Unicode, so code checks \_\_STDC_ISO_10646\_\_ macro before using wchar_t as UTF.

* If wchar_t is 4 bytes wide and in Unicode, do proper convert from wchar_t to UTF-32 (instead of copy), as wchar_t in UCS-4 (superset of UTF-32). UTF-32 can be simply copied to wchar_t

This is alternative and extended version of PR #3342