fix(copy): clear array destinations correctly for non-array sources

Previously, we failed to modify the `length` property of an array destination when
dealing with non-array sources. This CL ensures that the length is correctly reset
to 0 before copying properties from the source object.

While it's not a super-important feature, it's literally a single line of code and
not very difficult to understand

Closes #8610
why don't you move the forEach above into an else branch here?