Refactor RejoinProducer to get rid of the firstWork trick.

It now polls the snapshot sink to see if the first snapshot block is ready, if
not, the producer will queue itself onto the site queue and retry again. This
basically spins so CPU usage may not be low while the site is waiting for data,
but the code is much simpler.
Refactor ElasticJoinProducer to get rid of the firtWork hack.

Just spin on the site thread until the first snapshot data block arrives, then
block restore all partitioned table data.