Add a StepSizer based on quadratic interpolation

Interpolating step sizer implemented as a first step for adding conjugate gradient method in order to have a reasonable estimate for the initial step size (also for gradient descent method where it replaced ConstantStepSize).

It was necessary to change StepSizer interface because these estimates based on interpolation often need the descent direction that is readily available (some also need the previously accepted step size, but that one is harder to come by, most easily perhaps as ||x_k - x_k-1||).

The name QuadraticInterpolateStepSize could be shorter, but on the other hand it will rarely be used by the client code.
Can't we just rescale the gradient to have a norm of 1, and then make the first step InitialStepFactor * gradient (and 1 if it's not set?). This matches what we do in LBFGS (and will match what happens in BFGS). This keeps us in the local neighborhood and keeps it translation invariant. This way there's no worry about rounding unless x has a value of 10^20 (or something) which is very unusual, and the person can set the InitialStepFactor. 
This seems much simpler, and given that it's impossible to do the right thing, might as well do the simplest correct thing.