Man City hit back to reach FA Cup semis after Swansea scare