Use ES6 generator as listener handler, fix the calling sequence

1. Use ES6 generator as event handler, code like this looks better.
```javascript
	socket.on('todo:get', function *(data) {
		var res = yield todos.get;
		this.emit('todo:get', res);
	});
```
2. Fix the calling sequence to middleware -> event listener, the previous one event listener called first, some middleware like logger could not determine the code execution time.