arrayChange supports recursive updates--modifying array within the arrayChange callback; fixes #1552