South African stocks rally