perf(Scope): limit propagation of $broadcast to scopes that have registered 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.

Resolves https://github.com/angular/angular.js/issues/5341