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.