feat: Attaching with IPython event loop.
The app now checks if it is already running inside an QApplication instance. In which case it does not start the exec_
function. That means that IPython can attach to Qt's event loop, hence creating the main application does not block the interactive shell.