issue #3069: Refactor and Improve EventDispatcher

Changes contain:

* `EventListenerTouch` has to be separated to `EventListenerTouchOneByOne` and `EventListenerTouchAllAtOnce`, it will be clearer for developer to decide to use which type of touch event listener.

* Remove all controller codes from `cocos2d::Layer`. `Layer` should not be a controller. All event listener registrations should use `EventDispatcher`.

* Don’t insert member variables which are not relevant to `Node`. `Node` should be as **small**, **fast** as possible.

* Improve the **SORT** logic of `EventListener`, we should divide event listeners into two parts and store them in different vectors. One is for `fixed priority event listeners`, another is for `scene graph based priority listeners`. In this way, when a listener’s priority is changed, only one of the vectors should be sorted.

* Use `int` as key instead of `string` in listener map.