Added iconv CharsetProvider

This method should throw an exception on error. Using the return value for errors AND the actual pointer is too fragile. What if `iconv_open()` returns a pointer which is below 10? Maybe not likely but could happen.