Fix indiscriminate EmptyPartitionCount and add tuning for catch up mode

MessageConsumerImpl.readAndReturnShard was always incrementing EmptyPartitionCount.

At startup we try to roll through all partitions once to catch up with
any past messages. Allow for a different poll interval until we're done
catching up and reach a steady state.

Expose isCatchingUp() to reflect the aforementioned catch up state, and the work & idle queue depths.