fix($compile): Detect when a directive `compile` removes `tElement`

Delect when a directive `compile` function removes `tElement` and keep on with the compilation from the following node

Closes #9198
I agree that the code is not self-explanatory, but maybe only because `ngCanary` is such a cryptic name for a property.
What if it was changed like this:

```
for (i = 0; i < nodeList.length; ++i) {
    nodeList[i].ngHasBeenProcessed = false;
}

for (i = 0; i < nodeList.length; (nodeList[i].ngHasBeenProcessed) && i++) {
    nodeList[i].ngHasBeenProcessed = true;
    ...
```