C backend: Fix missing casts for integer literals in some cases

exprNewIMMi() was given the vreg's original dtype, but can only emit
the constant as 32bit int or 64bit long long (either signed or
unsigned). Thus the IMM node carried the original dtype instead of
representing the text it can emit, and the following exprNewCAST()
to the original dtype thought a cast wasn't needed anymore.

This patch ensures that exprNewIMMi() is only given the dtypes it can
emit.
C backend: Fix STRING mangling for -lang qb suffixes

(3272d2f6 regression)

The C backend uses hMangleBuiltInType() to append type codes on
suffixed variables so they end up having unique ids. The old typecode
table used "r" to mangle STRING in this case, which seems like just
a random choice as it's not part of the Itanium C++ ABI spec, in the
new one added in 3272d2f6 the entry for STRING was simply NULL because
it didn't seem needed, but actually that triggered the assert() when
compiling the -lang qb log tests with -gen gcc.

Now it'll use the normal mangling used for STRING instead of a
single-letter type code, that should be better than a random character.