Finally fixed all ways of exiting the app so that the ThreadPoolExecutor
shuts down. This includes the control-c method and the default Mac OSX
command-q method, both of which required me to override the
Tkinter.CallWrapper class with my own custom version which catches
exceptions and properly shuts down the ThreadPoolExecutor