Template method refactor

Things to consider
- Refactored methods from having bounds passed in explicitly as arguements/
- Refactored out stats methods from being in the explicit solve methods to be methods in the super class.
- Currently solveFirst and solveOne only has the stats method different between them. Should we merge these methods with the parent method?