Sunderland battled back from a poor start to hold Southampton to a 2-2 draw in a pulsating game at the Stadium of Light.