Fixed inconsistencies in CSV TabularData and RowIterator implementations

I added some additional tests to prove that the CSV implementation actually didn't match the same behavior as the POI implementations, specifically around the cases shown in spreadsheet4.xlsx where a column name is missing. I think this is due to the fact that the CSV `RowIterator` took a `List<String>` for the columns names, and therefor had to rely on the list index to map the values to the column, as opposed to the POI `RowIterator`s that took a map of index to column name that excludes entries for missing column names. In either case, the `getColumnNames` implementations returned the list of column names, excluding the missing columns. I think that the consistent solution is to update the CSV `RowIterator` to take a map as well.

I implemented that approach, so let me know if this matches the original design intentions. I am also curious what version you think this should be. Changing the `TablarData.getColumnNames()` interface from `Iterable` to `List` should be backwards compatible because it is making the type more specific, so I think this should be considered a patch release. If you agree, I'll update the change log accordingly.