Hand off excess messages to SQS

After a certain backlog threshold is met, start sending incoming jobs to
SQS for later processing.  This should help with the condition where
autoscale-launched instances are unable to assist with a giant batch of
work that has already subsided after they finished launching.

It also includes a corresponding receiver that will activate when
otherwise idle and attempt to receive messages from SQS.

This still needs some work -- in particular, metrics like number of
offloaded messages should be collected and autoscaling should be
adjusted to take into account the fact that local queues will no longer
become very large, so should not be used as a criterion for autoscaling.
Replace server shutdown WaitGroup with implementation based on combiner

Combiner already tracks the in-flight job count and queue size,
deferring shutdown until this count is zero is a cleaner approach than
duplicating behavior.