Brentford beat Swindon on penalties after a thrilling 3-3 draw at Griffin Park to reach the League One play-off final.