Initialize transports on demand

This avoids creating NioEventLoopGroups for unused transports. It also avoids logging a warning if the UDT library is unavailable even when its not used.

I've changed clientToProxyBossPools and clientToProxyWorkerPools to be HashMaps as they are (and were) only accessed while holding a lock on the server group, so the overhead of a CCM is unnecessary. It might be worth going further and making getProxyToServerWorkerFor() synchronized, allowing proxyToServerWorkerPools also to be a plain HashMap.
Give me 2, I'll do this. 

As per my note in the PR comment, it would also mean making getProxyToServerWorkerFor()  synchronised.