refactor($scope): prevent multiple calls to listener on `$destroy`

Prevent isolated scopes from having listeners that get called
multiple times when on `$destroy`
fix($compile): Resolve leak with asynchronous compilation

Stop an asynchronous compilation when this is performed on an
already destroyed scope

Closes #9199
Closes #9079
Closes #8504
Closes #9197