Refactors statistics and logging out of the algorithm subclasses

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?

Fixes #13 

Reviewers: @cpkleynhans  @joseph2625 @mhyee