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 PR is alternative for #3351 and #3342