Stop processing mouse events on first handler.

Once a widget handles the event there's no reason to pass it along to
its siblings.  We also now process the child elements in reverse order,
so visually we're processing them front to back (in case of overlapping
widgets).
Genericize the mouse event propagation.