Move most string operations StringLike => String

The other StringLike is Symbol which can only be compared for equality
and converted to and from Strings. This means the majority of string
related functionality, including UTF-8 logic, can be moved to String.

This requires less code duplication to proxy functions on StringLike
through to String. It also provides better type safety for functions
that were exposed directly like operator==
Explicitly return 0 from tests

Not sure how this didn't warn before but this is definitely cleaner
More String implementation

This adds logic for UTF-8 encoding to support fromFill() but still
doesn't support any mutating operations

- Add StringValue::fromFill for creating a prefilled string

- Add StringValue::fromAppended() for appending strings