Recode some IO routines to avoid double-free errors.

In some places, used c_string_copy in place of c_string to show that a variable has
ownership of that temp string.

We still leak in string concatenation.  Intermediate c_string_copy results must be
captured so they can later be freed.  Or better yet, if concatenation is overloaded to
accept one or two c_string_copy args, those can be freed by concatenation itself.

"this.s = _nullString;" does not do what you would expect, since it calls assignment.  I
replaced some of these with __primitive("=", this.s, _nullString); to prevent double frees
in some cases.

In the cast to complex, I made "im" be always a c_string_copy to simplify memory tracking.

In Regexp.chpl, removed some TODOs to use a toString() that does not allocate space.  We
do that now.
Fix revised c_strings to pass no-local testing.

###DETAILS
####modules/internal/ChapelIO.chpl
Must use primitive to set freed string pointer to null.

####modules/internal/String.chpl
Removed TODO: Operand type of chpl_rt_free_c_string is now c_string_copy, as required.

####modules/standard/NewString.chpl
Added workaround implementation of free_baseType().
Workaround is needed because baseType is c_string and not c_string_copy.
The latter is technically correct, because that field actually owns the string data it
points to.

####runtime/src/chpl-string.c
Changed chpl_string_widen() to accommodate a NULL input pointer.