Make itertuples really an iterator/generator in implementation, not just return type
`itertuples` is not really an iterator/generator and constructs a copy of whole DataFrame in memory. Ideally it would return just an iterator and construct row by row as it is being iterated over.