Replaces the synchronous CSV import loop in Customers and Items with one
queued job per row (CustomerImportJob / ItemImportJob, processed via
CustomerCsvRowProcessor / ItemCsvRowProcessor). Only structural checks
that would make every row's job meaningless (upload failure, missing or
mismatched headers) are done in the controller; per-row validation
happens in the job itself so one bad row can't block the rest of the
file. ImportBatch / ImportBatchService track per-import progress so
completion can be reported once all rows finish.
Issue #3833 Phase 3.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>