I have got level transitions in! It's a bit messy with me copy-pasting a lot of the score printing and password printing code from other parts of the project but it works.
I created a new GameState for level transitions and I have to pass information between the LevelTransition GameState and the Play GameState, which I do by just passing arguments about all over the place. But you will see this when I release the code along with the game. There is probably a proper way to do it and its making me think about my lack of formal computer science education. I should probably go and read a book about it.
Thanks for reading.