Use last alias in autoDestroy calls.
Use last alias in autoDestroy calls.

This is a workaround for an error that arose in string assignment.  The assignment keeps
the same record but may update the buff field.  That means that the records treated as
aliases are no longer identical.  We must call autoDestroy on the one that was modified.
The buff field in other aliases will not have been updated and will have been freed in the
assignment.  That leads to a double-deletion error.

The heuristic solution is to use the last alias in a group, with the expectation that this
one will be the one that is modified.

A better solution would be to treat copies of an object as aliases only for as long as
they are guaranteed to be unmodified.  This constancy is preserved by bitwise copies, and
also when the object is passed to a subroutine by "const ref".  If an object is passed by
ref or its address taken (or the address of one of its fields taken, recursively) or
(obviously) assigned to or one of its fields assigned to, then it should be dropped from
the alias group.

That change would rely on replacing the existing function-wide alias tracking with
instruction-by-instruction alias tracking.

Down to 202 regressions overall (24 run-time).

hildeth/chapel,hildeth/chapel,hildeth/chapel,hildeth/chapel,hildeth/chapel,hildeth/chapel,hildeth/chapel