What is the algorithm used in pbrt-v3 for triangle intersection? Where's this algorithm come from? Any references?

And a specific question, when the authors compute the transformation from world space to ray-triangle intersection coordinate space, what's the permutation step for?
The permutation is described in section 3.6.2, page 158-159.

A reason behind this permutation is that a shear matrix (which involves dividing z component of ray direction) is computed to transform from world space to ray triangle intersection coordinate space.
Permuting the coordinates is to avoid divide-by-0 error by mapping nonzero component to +z.