Refactor the quasi-Newton updates into their own files.
Refactor some BFGS linesearch code into it's own files.
Change default convergence tolerances so that we get reasonably close to the minima of the Rosenbrock function.
Add a unit test of (L-)BFGS based on the standard 2D Rosenbrock function.

Also cleans up an awkward template parameter ordering.
Fix some code comments in io/reader.hpp
Refactor code to prevent duplication with (BFGS-based) optimization routines.