Changed JustFunction and JustGradient to FunctionOnly and GradientOnly
Make BFGS more robust.
There are two changes. The first is that the BFGS hessian was not initialized properly
so that if the structure was re-used, old values of the hessian would polute the
next step. Second, added a test for near-equality of function value in bisection.
The function value converges faster than the gradient, and floating point noise
can corrupt the linesearch. This allows BFGS to converge to machine precision
(where before it could only converge to a norm of 1e-9) on a third part dataset.