This adds two methods for handling executing shells async. The notification
has been reworked to use this method so there is less blocking. A callback
can be passed to the handler method for various actions on the exit status
of the script execution.
This patch adds tracking of the build process's status code. This allows us
to respond to the build process within the program much easier. Also added
a simple API for desktop notification of the build process and its exit code
which is useful and pretty.
In the process we needed to define if a project can be run...
Python and rust can always be run as they will build their binaries
whereas make and cmake need to be configured etc...