Re-opening because we ought to do something along these lines at some point. The DictReader and DictWriter are inadequate for preserving order and they are unnecessarily memory intensive (one dict per record).
FWIW, the non-conforming field name problem has already been solved by recent improvements to collections.namedtuple using rename=True.