We need a better way to get strings from NCI

The last refactor of the NCI subsystem got rid of the 't' type used to pass C strings. This gives us more flexibility but doesn't solve all problems.

Take for example Mysql: we can specify the character set used for the connection with the database, and sometimes we can't use the current locale. We may want to read a table that contains unicode characters out of the range compatible with latin-1 without loses, while using latin-1 locale.

The way to convert to parrot string right now is to use the parrot string api via nci, but we don't have all the pieces of the puzzle available. In order to use Parrot_str_new_init, which allows to specify the ecnoding, we need the string length, and we don't have it. Also we need a encoding object, which is not a PMC and thus need even more NCI.
Using Parrot_str_from_platform_cstring is not always possible, because it throws for example if the platform encoding is utf8 and the string contains values not interpretable as a utf8 sequence.

Even if these problems are solved, is a lose of cpu and programmer time having to invoke more nci functions or transcoding for such a common task as getting a C string.

I think the simpler solution is to add to UnManagedStruct a method to get a string from the value pointed by it and the encoding specified, like the get_string method in ByteBuffer. Of course this in unsafe, but no more than any other UnManagedStruct usages.