Switch exposed String type to Text

Most of the strings going into and out of GObject based libraries are
zero terminated UTF8 arrays. We now represent them in terms of Text,
instead of plain Strings. This is not only faster, but the Text API is
nicer to use.

The C strings encoding filenames are now encoded as Strings, instead of
ByteStrings, in order to make their use together with
System.FilePath (for example) easier.