Warnings for Windows x64 (MSVC) and GCC on Linux

These are some of @linquize's warning fixes (the ones that seemed correct to me), and some extra stuff I saw on my Linux box.

The only controversial change is 2f2a70e, where I removed the stubbed iconv API and instead used macros to hide the calls on platforms where iconv is not available. This makes it slightly more cluttered but IMO it makes it much more obvious to the reader that those iconv calls are not doing anything during compilation. It also fixes a couple warnings regarding unused variables (the variables that were being passed to the stubbed calls).

@arrbee are you ok with this?