use static channels for remote syncing instead of subscribing/unsubscribing 5 channels for every connection
don't call non existant transport onDisconnect
some improvement for redisStore

1. Improve the performance of subscribe/unsubscribe/message event logic.
2. Remove duplicates clearHandlers call.
fix potential receiving duplicate message bug
add option `gc interval` and `handshake expiration`

`gc interval` and `handshake expiration` should be
configured by users in some case other than hard-coding.
add option `user-agent-based selector`

it is needed to select transport item based on
the client user agent in some cases.
change end() to destroy() for websocket doClose

to avoid half-closing
add option `polling response delay` for http-polling

servers in a cluster can sync their states in the
delay time before next polling