Erling Haaland fired Manchester City to a gripping 2-1 win over leaders Arsenal as the Premier League title race took another twist.