Remove bogous DtoMemCpy assertion.

DtoMemCpy is called with identical pointer arguments in
some legal cases.
Minor array copy refactoring.
Do not generate invalid memcpy() for struct self assignment.

This catches only the most trivial case, need to investigate
this further.

See GitHub #385.