Interesting indeed.
I see that the underlying data is held as []rune instead of []byte,
which can take 4x memory for large chunks of ASCII text. Also, I
haven't measured it, but I would have guessed that the conversion
costs between them are non-negligible. For example, the regexp package
in the standard library works on runes conceptually (e.g. MatchReader
takes an io.RuneReader and not an io.ByteReader, and see also
http://play.golang.org/p/_-zdYCi2ZD), but it throws around []byte, not
[]rune. I'm curious about your thoughts on picking []rune vs []byte
for T. I'm sure that []rune makes some programming easier, but I don't
have the experience with it that you do.