Refactored Method/Solver
========================
The `Optimizer` class has been removed in favour of a more generic `Method`, from which now `Method_Solver` and `Method_MC` are derived.
`Method_LLG` and `Method_GNEB` are now derived from `Method_Solver` and therefore make use of it's abstract iteration scheme (e.g. termination on convergence of the force).
`Method_Solver`
-------------------
This new abstract class unifies the previous `Method` and `Optimizer` classes and is templated:
C++
template<Solver solver>
class Method_Solver : public Method
which allows for the abstraction from the actual Solver. The velocity projection (VP), semi-implicit b (SIB), Heun and Depondt solvers are implemented in their own header files for readability.
They now use the same force calculation function, so that the solver is now really independent of the applied method.
An added benefit is that the force naturally does not converge as long as a spin current or temperature keeps the system from reaching an equilibrium position.
The Solvers are tested in terms of Lamor precession, damping and convergence of a test problem, ensuring their equivalence and correctness.
`Method_MC`
----------------
This class is an initial implementation of metropolis monte carlo with an adaptive cone algotrithm. Due to the structure of the energy and gradient calculations it was not possible so far to make this method efficient and it has only been added as a proof of concept.
Pythonified the python bindings
========================
The API has been made safer and should now catch more errors and provide better info when a crash occurs.
The python package build is now tested in CIs and python packages are automatically uploaded to [PyPI](https://pypi.org/project/spirit) and [TestPyPI](https://test.pypi.org/project/spirit)
*Note*: `spirit.parameters_llg` etc. are now re-packaged as `spirit.parameters.llg` etc.
Other
========================
- fixed and improved OpenMP backend
- added remaining GNEB backend functions
- added gradient method for spin currents
- added test functionality for runtime-variable geometry (using this may currently fail, but it works for post-processing)
- added unit tests for finite difference functions in `Hamiltonian`s
- tidied up `Utilities` and moved `IO` functionality to it's own folder
- using *fmtlib* instead of manual formatting of strings
- merged `ui-console` and `ui-qt` into a single `ui-cpp`
- ui-cpp: can now read multiple images at a time, similar to a chain
Some bugfixes, some improvements...