Request executors by specifying the number pending

Instead of requesting a delta number of executors form the cluster
manager, we assume that the cluster manager keeps track of all prior
requests and will eventually fulfill them. Under this assumption,
requesting deltas risks double counting new executors requested.
Instead, we use an interface where a later request overrides rather
than complements the value of a prior request.
Remove timeout logic for pending requests

Rather than firing-and-forgetting add and remove requests, we
block on receiving an acknowledgement that the cluster manager
has received our request. This allows us to safely reason about
whether to keep track of pending requests instead of potentially
double counting requests by timing out old ones.