Refactor shell code into its own integrator
The shell and normal-mode code is hard to understand and need to be refactored. If it needs to be tightly coupled to force calculation then we need to decouple it. For example, rerun, minimize and tpi have all been implemented in their own integrator loop, and shells could do likewise. In that case there would not be an additional layer of functions wrapping do_force to understand and maintain.