CsvData holds the values from a CSV line. If the CsvLoader was created with CsvLoader.withHeaders,
it also holds a reference to the list of headers found in the CSV's first non-empty row. Values can
be accessed by index (absolute value), or (when created with CsvLoader.withHeaders) by header with
relative index when necessary (i.e. when several headers have the same label).
CsvLoader wraps around a Stream and enables reading data in CSV format. Consumers of CSV data
can use the rows stream to receive each line as a CsvData object.