Accept a CSV upload and queue it for asynchronous processing.
Previously this endpoint parsed and inserted contacts inline, which on a
10k-row CSV would block the FastAPI worker for 30+ seconds and time out
most reverse proxies. Now the route persists the upload as a
CampaignDataImport row, dispatches a Celery task, and returns 202.
The client polls GET /campaigns/{id}/imports/{import_id} for status.
campaign_id (integer, required): The unique identifier of the campaignmultipart/form-data with the following fields: