Improve clone error message for immediates

Fixes #2486
Improve exception message for built in allocation disabled
Add specs for String#clone
Add specs for modifying dupped and cloned strings

This uses [] to make sure we slice the string and get a (if implemented)
unshared string back.
Add custom String#clone for managed shared state properly

Strings can share the underlying byte array. This makes sure we mark the
clone as shared.

Fixes #2485