New structure for accumulating dispatch listeners.

We want to allow multiple event listeners attached to a single event for a
single component. So we change event._dispatchListeners to be a hash with
component IDs as keys and corresponding event listeners arrays as values.

We also introduce a notion of primary and non-primary listeners, where primary
listener is one which is declared through a component's virtual DOM structure
(returned from render() method) while non-primary can be attached at any phase
of a component lifecycle. Primary listeners are always stored as first elements
of listeners arrays and thus we have a fast way to add/remove them which would
help during component reconcilation.