Custom product data

Enable custom product data from the csv import/export tools. Required a good bit of refactoring from the previous style.
This used to entirely ignore the header column and `reader` only had the actual product rows, but we need the header data for the custom  data columns.