First pass at extracting csv_model from internal codebase.

Ready for review.
Same as options? Doesn't apply as columns is an array of CSVModel::Column objects.