This module uses the POSIX iconv() library function. The primary
advantage of using iconv is that it is widely available, most systems
have a wide range of supported string encodings and the conversion speed
it typically good. The iconv library is available on all unix systems
(since it is required by the POSIX.1 standard) and GNU libiconv is
available as a standalone library for other systems, including Windows.

If invalid byte sequences are found in the input they are ignored and
conversion continues if possible. This is not always possible especially
with stateful encodings. No placeholder character is inserted into the
output so there will be no indication that invalid byte sequences were
encountered.

If there are characters in the input that have no direct corresponding
character in the output encoding then they are dealt in one of two ways,
depending on the Fuzzy argument. We can try and Transliterate them into
the nearest corresponding character(s) or use a replacement character
(typically '?' or the Unicode replacement character). Alternatively they
can simply be Discarded.

In either case, no exceptions will occur. In the case of unrecoverable
errors, the output will simply be truncated. This includes the case of
unrecognised or unsupported encoding names; the output will be empty.

This function only works with the GNU iconv implementation which provides
this feature beyond what is required by the iconv specification.

This version provides a more complete but less convenient conversion
interface. It exposes all the possible error conditions and never throws
exceptions.

The conversion is still lazy. It returns a list of spans, where a span may
be an ordinary span of output text or a conversion error. This somewhat
complex interface allows both for lazy conversion and for precise reporting
of conversion problems. The other functions convert and convertStrictly
are actually simple wrappers on this function.

The conversion from the input to output string encoding is not
supported by the underlying iconv implementation. This is usually
because a named encoding is not recognised or support for it
was not enabled on this system.

The POSIX standard does not guarantee that all possible combinations
of recognised string encoding are supported, however most common
implementations do support all possible combinations.

This error covers the case where the end of the input has trailing
bytes that are the initial bytes of a valid character in the input
encoding. In other words, it looks like the input ended in the middle of
a multi-byte character. This would often be an indication that the input
was somehow truncated. Again, the Int parameter is the byte offset in
the input where the incomplete character starts.

An unexpected iconv error. The iconv spec lists a number of possible
expected errors but does not guarantee that there might not be other
errors.

This error can occur either immediately, which might indicate that the
iconv installation is messed up somehow, or it could occur later which
might indicate resource exhaustion or some other internal iconv error.

Use errnoToIOError to get slightly more information
on what the error could possibly be.