Some improvements of String

Reduced copies and conversions, especially when constructing from UTF-8 string.
Fixed the confusing use of ```String::Type``` and related comments. ```String```'s internal encoding is not always UTF16-BE, the byte order depends on the CPU endian.

This patch assumes ```std::string``` has a contiguous buffer. I think its virtually guaranteed.