feat($rootScope): implement non-propagating event dispatcher

$dispatch provides a mechanism to dispatch events to a single scope without worrying about having to terminate propagation. This is useful for many directives which need to communicate with an immediately adjacent scope, but do not wish to propagate the events beyond that point.

This patch also (experimentally) combines the event dispatch logic from $broadcast and $emit into a shared routine, so that $dispatch can easily share the same code. Unfortunately the shared code is not super clean, which is
sort of a downside.

This is really just an experiment, however a strategy like $dispatch would be useful in a lot of cases, so I'm interested to see what people think of it.

The good news is that, in combination with the "shared logic" patch, `$dispatch()` is a one-liner.