Add a new class for general algorithms and make propagators a subclass of this
The different run modes use different algorithms to progress the run. Examples include minimizers for the go run mode, propagators for td, eigensolvers for the gs, etc. We should add a general class for algorithms, such that all the mentioned cases can become subclasses of the algorithm class.