perF($compile): don't create jq wrapper for linkNode needlesly

when compileNode and linkNode are the same, we can reuse the existing jqLite wrapper.
perf(ngRepeat): simplify code and remove duplicate array.length access

minimal perf gain (~2ms)
chore(ngRepeat): fix typo in a comment
chore(ngRepeat): improve inline comments
refactor(ngRepeat): simplify previousNode boundary calculation

the previousNode was almost always correct except when we added a new block in which case incorrectly
assigned the cloned collection to the variable instead of the end comment node.
refactor($compile): automatically append end comment nodes to all element-transclusion templates

Previously we would do it manually in all of our structural directives.

BREAKING CHANGE: element-transcluded directives now have an extra comment automatically appended to their cloned DOM

This comment is usually needed to keep track the end boundary in the event child directives modify the root node(s).
If not used for this purpose it can be safely ignored.
refactor(jqLite): simplify jqLiteAddNodes when multiple nodes are being added

This branch is not as hot as the single node branch and the slice that we need for old webkit/phantom makes for loop preferable.
perf($parse): speed up fn invocation by optimizing arg collection

8-15% improvement for depending on the number of args
refactor($parse): small readability improvements
perf($parse): speed up fn invocation for no args case
chore($parse): name anonymous functions for better debugging
style($parse): small readability improvements
perf($parse): optimize filter implementation

- generate less garbage
- optimize argument collection
- use call instead of apply for no arg case (2x boost)
fix(Scope): don't clear the phase when an exception is thrown from asyncQueue or watch

If we clear it here, then any other watch or async task could start a new digest.