refactor string representation

Strings and symbols use the same representation,
which stores length explicitly and thus may also contain NUL.