fix(ngView): use animation promises ensure that only one leave animation occurs at a time

the tracking depended on a local flag variable, which was susceptible to corruption due to
race conditions.

Closes #9355
Closes #7606
Closes #9374