Consumer supports re-sharding for object types
Consumers will reshard in-place using O(shard size) extra space if incoming delta signals a different number of shards. To enable that this change also refactors code in the read path for all existing consumers irrespective of resharding.