topic/PLAT-6701

This adds volatility providers and test. These fall into two groups: 
VolatilitySurfaceProvider is an interface for something that 'provides' a VolatilitySurface and a parameter sensitivity surface (each point on the 'surface' is the sensitivity of the volatility at that point to the model parameters) for a given set of model parameters. 
DiscreteVolatilityFunctionProvider gives you a DiscreteVolatilityFunction for a set of observation points (expiry-strike points), which it turn gives you the volatilities and the Jacobian (matrix of the volatilities sensitivity to model parameters) for a set of model parameters.

There is a converted from a VolatilitySurfaceProvider to a DiscreteVolatilityFunctionProvider. 
The reason for the 'discrete' stuff, is that most pricing and calibration will hit the same points on the surface, so it is sensible to abstract out the idea of "I give you some (model) parameters and you give me the volatilities I require (plus the associated Jacobian)".   
`weights` needs to be copied on construction.