delegate socket.join and socket.leave

app.io.route('message', function* (next, message) {
  this.broadcast('message', message);
});

fix some bugs in router
add missing dependencies

add some test cases
fix order of middlewares
Merge remote-tracking branch 'origin/master'