perf(Scope): limit propagation of $broadcast to scopes that have listeners for the event

Update $on and $destroy to maintain a count of event keys registered for each scope and its children.
$broadcast will not descend past a node that has a count of 0/undefined for the $broadcasted event key.

Closes #5341
Closes #5371
Merge branch 'master' of https://github.com/angular/angular.js
componentizd!