fix #245 on socket.io reconnect, update the connecting field with the current Cancellable

Ensure calls to SocketIOConnection.reconnect() when a reconnect attempt is already is progress will properly have their DependentCancellables made children of that attempt.
fix #181 configurable reconnectDelay and reconnectDelayMax for socket.io

Add class SocketIORequest.Config whose instances may optionally be passed to SocketIORequest's constructor to configure reconnectDelay (initial delay) and reconnectDelayMax.  The delay will double on each attempt as before, but never exceed reconnectDelayMax, if specified.  If reconnectDelayMax is 0 (the default), there is no max and reconnect delay will grow forever (as it did before this change).
randomize socket.io reconnect delays +/-50%

To prevent a "thundering herd" of clients all reconnecting on the same schedule after a server-side outage, randomize each reconnect attempt's delay by +/-50%
name threads created by AsyncServer.synchronousWorkers
auto-shrink AsyncServer.synchronousWorkers threadpool when idle
Merge branch 'synchronous-workers'