Rory McIlroy charged back into major contention with an impressive second-round fightback at the PGA Championship, as Scottie Scheffler failed to build on his fast start in Pennsylvania.