Aston Villa extended their unbeaten run to five Premier League matches with a thrilling 3-2 victory against Southampton at St Mary's Stadium.