Problem: C codec doesn't account for case where string field is set to its current value

e.g.
```c
mymsg_set_mystring (mymsg, mymsg_mystring (mymsg));
```

This causes the valgrind error "Source and destination overlap in strncpy".
It is also extra work because no copy is necessary.

Although this seems silly, it may come up in in some cases where, for example,
the processing of a request and forming of a reply is separated by several layers
of logic that make tracking whether the field has changed between request and
reply more trouble than just setting it again.

Solution: Don't perform the copy if the (const char*) pointer value is identical.

Incidental: Add assert guards for when the pointer is NULL.