The normalization is usually done in the dataset 222 via the transform argument.
The dataloader provides a Python iterator returning tuples and the enumerate will add the step. You can experience this manually (in Python3):
it = iter(train_loader)
first = next(it)
second = next(it)

will give you the first two things from the train_loader that the for loop would get.
Python Iterators are a concept many people ask and write about in various forums, I don’t know a canonical reference to link to, but searching for “python iterators” you’ll find many things on it.
Finally the step, (x, y) works due to “tuple unpacking”, again a general Python thing.
Best regards
Thomas