Initial attempt: builtins with base_string

Introduced some copies that may be unnecessary when converting to and
from std::string. We need to take a careful pass over string builtins to
make them efficient.