Give PetriNet names

* Names now appear when loading
* Need updating to save from these names
Save now determines whether to save/save as based on petri net name

* Uses visitor pattern to achieve this
File names are updated when saved on the tab view
Update unit tests
Copy petri net on saved

* This means that if the user quits and hasnt changed since saved
  we will just exit
Fix bug in opening new tab when all windows closed

* Need to add tab to petrinettabs before updating the frame