moveTickets(): Promise<TicketMoveAnswer[]>
Move tickets for each (person, listing) and answer what really moved. The lines are read inside the write transaction, so two doors that move tickets at the same time cannot pass a line's bounds. A no-quantity (quantity 0) line and a refunded line are not tickets and never move.