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 like this comment lucas.

Anyways, just to clarify some of the things I was saying before, lets look at this diff (with comments inserted showing the WAT):

```js
      for (i = 0; i < nodeList.length; ++i) {
        // Okay, we're looping over everything and adding our canary string (why is this a string? who knows!)
        nodeList[i].ngCanary = canary;
      }

      for (i = 0; i < nodeList.length; (nodeList[i].ngCanary != canary) && i++) {
         attrs = new Attributes();
        // We're now looping over all our nodes again.
        //
        // The very first thing we do in this loop (after creating the Attributes object), is
        // set the canary we literally __just__ set up, to "undefined". WAT.
        nodeList[i].ngCanary = undefined;
```

So, I understand the logic --- if the node is detached and removed from the nodeList collection, then `nodeList[i].ngCanary` will still be the canary, and  everything is okay. But the problem is that this is just extremely unclear.

What I want is for this logic to be self-explanatory, just by reading it. I want to see inline comments like `// If the processed node was not removed from the nodeList collection, then increment `i` to process the next node. I don't want the increment logic to be in the form it's currently in, as the third part of a for-loop, because that just makes the intent and function of it a complete mystery to anyone reading the code.

I hope I'm saying this in a nice and amicable fashion. Ordinarily the smallest diff is the best diff, but I think in this case if we do want to support this, then a more readable refactoring is probably in order.