First cut at UTF8 encoded literal string.  Very sub-optimal (1-8 ascii chars use 28 bytes - 20 array + 8 byte padding.

 Strings are consed up too frequently - equals and hashCode should use array.
 Should implement CharSequence.
 Should use a pooled storage array (simplest approach would be direct offset into buffer, with var length size encoded;  that has overhead of 1 byte for strings less that 127 bytes long; ref to buffer object adds 4 bytes