docs: def fields(self, new_fieldnames):
          """
          Overwrite all field names with new field names. Mass renaming.
          """
          if len(new_fieldnames) != len(self.fields):
              raise Exception("Cannot replace fieldnames (len: %s) with list of "
                              "incorrect length (len: %s)" % (len(new_fieldnames),
                                                              len(self.fields)))
          for old_name, new_name in izip(self.fields, new_fieldnames):
              # use pop instead of `del` in case old_name == new_name
              self.__data[new_name] = self.__data.pop(old_name)