Tab refresh experiment

Please don't merge yet. I still have a few Jasmine tests to write.

I wanted to put up a pull request so someone else can check out my proposed solution. The main changes are in MainPanel.js and then that functionality is used by DownloadPanel.js and VisualisePanel.js

I think we can also cut out a bunch of functions like `getMapPanel()` which basically give access to the map from various parts of out code (Viewport.js, MainPanel.js). Because in my solution the VisualisePanel closes it's own GFI popup rather than it happening from MainPanel.js