perf(Scope): use remove the need for the extra watch in $watchGroup

Instead of using a counter and an extra watch, just schedule the reaction function via .

This gives us the same/similar ordering and coalecsing of updates as counter without the extra
overhead. Also the code is easier to read.

Since interpolation uses watchGroup, this change additionally improves performance of interpolation.

In large table benchmark digest cost went down by 15-20% for interpolation.

Closes #8396
chore(Scope): remove deregisterNotifier feature for $watch

We no longer have a need for this feature that was added to primarily support
$watchGroup (see previous commit).

BREAKING CHANGE: deregisterNotifier callback for $watch is no longer available

This api was available only in the last few 1.3 beta versions and is not
very useful for applications, so we don't expect that anyone will be affected
by this change.
fix($watchGroup): call listener once when the watchExpressions array is empty
refactor(perf): migration event delegation benchmark to benchpress
style($rootScope): add semicolon for jshint
perf(jqLite): don't recreate the Node.contains polyfill
refactor(jqLite): drop Node.contains polyfill

Node.contains is supported on IE5+ and all the other browsers we care about.
refactor(jqLite): don't recreate mouse event map
refactor(jqLite): remove code duplication
perf(jqLite): don't use forEach in #off

off() is called on each element removal, so we want to make it as fast as possible
perf(jqLite): improve createEventHandler method by switching from forEach to for loop
perf($compile): optimize publicLinkFn
perf(jqLite): optimize event listener registration
refactor(jqLite): remove legacy code to support IE8 and older
perf(jqLite): don't register DOM listener for $destroy event

This even is fired purely within jqLite/jQuery so it doesn't make sense to register DOM listener here.

6% improvement in large table benchmark for both creation and destruction
fix(jqLite): fix event.stopImmediatePropagation() so it works as expected

jqLite doesn't override the default implementation of event.stopImmediatePropagation() and
so it doesn't work as expected, i.e, it doesn't prevent the rest of the event handlers
from being executed.
test(jqLite): Refactor test for isDefaultPrevent

Refactor the spec for isDefaultPrevent method so it fails if the
existing expectations aren't executed.