moved a lot of structure to inner classes and implemented a calculation for "Smart" matching of column headers to field names