Prevent listserver tasks from piling up

If a bunch of threads waiting for servers all decided that the
server list was expired at around the same time, they could all
end up submitting server list tasks which defeats the caching.

If listing all servers was slow, that would only exacerbate the
situation.

Instead, wrap the actual list server API call inside of a
non-blocking lock to make sure that it only happens once per
period.

Change-Id: I2a09ab3a226001d9de4268d366f65ef3e69cdd0d