Add integration learner
Add a learner that integrates a function over an interval.
Note that the state of the art methods (cquad) use the L2 norm of the difference of interpolants of the desired function, rather than the different in the integrals as an error estimate (put the absolute value inside, rather than outside, the integral sign). This highlights that we may need to/be able to share code between this and the 1D learner.
The main difference is probably that numerical quadrature methods are based on constructing polynomial approximants to the function of interest, and the properties of the basis polynomials determine the points of the domain that must be evaluated, and the weights assigned to them. For interval-bisection based approaches we may be able to make this appear similar to the 1D learner problem by making intervals (rather than the actual points at which the function is evaluated) 1st class citizens, and dealing with those.