Bdewitt/check workers avail

here is a shot at making the client first check with a server if it can send through a real request so it can balance across a cluster of servers without backing up the queues

if the check avail is enabled (currently a flag as we want to roll it out slowly) it will first send a check avail message (which we can change to a single byte) and gets a response, it will keep checking all of the nodes it is aware of until it finds one with availability

@localshred @devin-c