feat($rootScope): support registration of listener for multiple events

Adds support for registering multiple events within a single call, either as a
string containing space-separated event names, or else as an array of strings.
The same listener is registered for each name.

Closes #4432
How about an object containing key-value pairs, where key is the name of the event and value if a deregistration function for that event's listener. Plus a special key (e.g. 'all' to remove all listeners):

,,,
var deregister = createMap();
for (var i = 0; i < names.length; i++) {
    var name = names[i];
    deregister[name] = function () {
        var namedListeners = $$listeners[name];
        namedListeners[indexOf(namedListeners[listener])] = null;
    };
}
deregister.$all = function () {
    for (var i = 0; i < names.length; i++) {
        dergister[names[i]]();
    }
};
```

Then use it like this:

```
var removeListeners = scope.$on('event1, event2', someListener);
...
removeListeners.event1();   // removes the listener from the `event1` listeners
removeListeners.$all();   // removed the listener from all specified events' listeners