We should have a call to move here: `make_value<string_value>(move(buffer))`.  This ensure the string_value takes ownership of the buffer without making a copy, which is what we're doing now.