Fixed deadlock.

This commit replaces the producer/consumer queue that previously
took task reservations and launched them (using a blocking RPC)
on application backends.  Instead, this commit adds a
producer/consumer queue that contains reservations that correspond
to tasks that can be launched.  A thread pool pulls reservations off
of this queue, requests the task from the scheuder, and (if the
scheduler replies with a task) launches the task on the backend.
This change allows the use of blocking clients, which simplifies
the code and eliminates hairy issues with needing to use a pool of
clients to ensure client reuse.
temp