vector and matrix weights for curve_fit()

Simple refactoring to allow for weighted least squares in
non-linear fitting. For example, you can now pass data "errors"
wt = 1 / sigma, or an inverse covariance matrix for the data
wt = inv(covar).

It is intentional that the weights are passed as "inverted" parameters
already, and the inversions do not happen "on the fly".  Many ways of
estimating an unbiased covariance matrix do not result in an unbiased
inverse covariance matrix, and there could be correction factors. This
complexity is passed up to the user with this interface.