Regression - bash.bashFrame was None and restore settings failed:

See: #163
3fcbe3f87a99bca3f6aa85481697c0e3b073d390 (needed review!) introduced:

Traceback (most recent call last):
  File "<string>", line 11205, in Execute
  File "bash\barb.py", line 352, in Apply
    self.WarnRestart()
  File "bash\barb.py", line 411, in WarnRestart
    bash.bashFrame.Restart()
AttributeError: 'NoneType' object has no attribute 'Restart'

Turns out bashFrame is initialized in basher.BashApp.onInit(self):

def Init(self): # not OnInit(), we need to initialize _after_ the app
# has been instanced

There frame = BashFrame() is called and in there `BashFrame = self` is set.

Change: now basher.BashApp.onInit() returns the bashFrame !
Launcher fix:

When loading __init__.py files it wouldn't assign them a filename so they
displayed as File "<string>" in tracebacks.
Credit goes to @mjpieters (http://stackoverflow.com/a/27202474/281545)
_Link class draft to factor out duplicate code and wx dependencies:

Files, File Links and all up to InstallerLink(Link)
Minimal wrapping
TODO: self.title - where is it used - replace with self.text - done later
 _initData(), _enable() introduced - InstallerLink(Link->_Link) part I:

_enable(): later moved to a _Link subclass (EnabledLink)
_initData(): it's a hack cause I sometimes need to
customize the Installers (only ?) links text and help based on selected,
data etc attributes. Consider this an implementation detail, ugly at that:

Traceback (most recent call last):
  File "bash\balt.py", line 2030, in DoItemMenu
    self.itemMenu.PopupMenu(self,Link.Frame,selected)
  File "bash\balt.py", line 2085, in PopupMenu
    link.AppendToMenu(menu,parent,*args)
  File "bash\basher.py", line 9170, in AppendToMenu
    self.help = _(u"Duplicate selected %(installername)s.") % ({'installername':self.selected[0]})
AttributeError: Installer_Duplicate instance has no attribute 'selected'
Deleted balt.Tank_Open:

Under #173
It was only used in Installer_Open. Notice the help message was wrong
before (would display Open 'Bash Installers' instead of Open 'X Mod').
RIP: Files links:

I can't just import settings and bashFrame from basher - they will be None
So:

----------------------- Mopy/bash/basher/files_links.py -----------------------
index 69df419..c7c9c2b 100644
@@ -28,3 +28,3 @@
 from .. import balt, bosh, bush, bolt
-from . import _Link, settings, bashFrame, ListBoxes, bashBlue
+from . import _Link, bashFrame, ListBoxes, bashBlue
 from ..bolt import CancelError, SkipError, GPath, BoltError
@@ -56,3 +56,3 @@ def __init__(self,sortCol,prefix=''):
		 self.sortCol = sortCol
-        self.sortName = settings['bash.colNames'][sortCol]
+        self.sortName = bosh.settings['bash.colNames'][sortCol]
		 self.prefix = prefix

And then:

------------------------- Mopy/bash/basher/__init__.py -------------------------
index 5114ead..a25f758 100644
@@ -151,2 +151,4 @@

+def refreshData(): bashFrame.RefreshData() # TODO(ut): bashFrame is None in links files, ugly
+
 # Settings --------------------------------------------------------------------

----------------------- Mopy/bash/basher/files_links.py -----------------------
index c7c9c2b..df45dcb 100644
@@ -28,3 +28,3 @@
 from .. import balt, bosh, bush, bolt
-from . import _Link, bashFrame, ListBoxes, bashBlue
+from . import _Link, ListBoxes, bashBlue, refreshData
 from ..bolt import CancelError, SkipError, GPath, BoltError
@@ -139,3 +139,3 @@ def Execute(self,event):
			 pass
-        bashFrame.RefreshData()
+        refreshData()

@@ -272,3 +272,3 @@ def Execute(self,event):
		 #--Refresh stuff
-        bashFrame.RefreshData()
+        refreshData()

Notice that refreshData() goes bye bye later on as I should have used Link.Frame
- just did not occur to me that Link.Frame is a synonym for basher.bashFrame.
RIP: Installers links - introduced gInstallers module attribute:

Same story as basher.settings/bashFrame
Notice also:

+class _Installers_BoolLink_Refresh(BoolLink):
+    def Execute(self,event):
+        BoolLink.Execute(self,event)
+        gInstallers.gList.RefreshUI()
+

More of this needed
RIP: Installers_Skip Links - notice I renamed some for consistency
BoolLink revamp:

text, key and help are really class and not instance attributes - so made
them such.
TODO: avoid \ escapes when not needed
Notice help = 'Skip installing Bethesda ESMs, ESPs, and BSAs.'
_Installer_OpenAt base class to factor out duplicate code in "Open at" menu
RIP: Installer Links part I
wx wrappers in balt - wx.TheClipboard, wx.LIST_STATE_SELECTED
Installers and Files links wx free
RIP: Installer Links part II
Installer_Subs & InstallerDetails Espm Links are now EnabledLink subclasses:

No need to be InstallerLink subclasses - they were not using InstallerLink methods.
New EnabledLink class to encapsulate common behavior
Notice 'data' - what the hell is it ? An integer apparently the index of
the espm - self.data (should) == data in this case, so _enable() SHOULD
function correctly.
Duh
RIP: Installer_Subs & InstallerDetails Espm Links
InstallerProject Links and some wrapping and nitpick:

Some wrong/unneeded help attributes removed, List_Column(CheckLink).
2 methods inlined in InstallersList.OnDropFiles() - gosh, no need for used-once
methods in a 1000 lines class
Link.title attribute deleted:

Whenever used was set to the Link text (the _Link.text attribute) except:

Installers_UninstallAllPackages
Installers_UninstallAllUnknownFiles
Installers_AutoRefreshBethsoft
Installers_Enabled
Installer_Move

where the rather generic 'Installers' was displayed as the dialog title
(set in self.title = window.data.title).
Now those display the text of the link as the title except
Installers_Enabled which needed edit.

Notice that InstallerConverter_Apply has special title (text is set in
__init__) and also InstallerConverter_Create has different dialogTitle
from the Link text.
Interlude: wx image types to balt and image lists to constants:

The usual question - bosh.dirs initialization.
RIP: Rest of InstallerLinks