Large update

GUI is almost done, transactions and optimizations added, only left to
receive input in source matrices and to print the right destination
matrix (we have a bug somewhere regarding it's panel)
Added tests that test the Functions namespace (only thing that needs
testing)
Added thread safety to the GUI function (Since swing isn't thread safe)
using invokeLater in the main function