Keep track of unavailable managers to reduce latency.

When you configure multiple servers and you run multiple requests on the same client.
It makes no sense to keep trying to connect to a manager that times out.

This change keeps track of the unavailable managers and gives priority to the managers
that are actually responding.

This change also attempts to improve load distribution when using multiple managers.
Managers are shuffled both at boot time and when starting a new request.

Before this, a client pretty much never changed manager.
Merge PR #33: Keep track of unavailable managers.

Just changed the commit message to be more descriptive.