Initial commit of functions from github.com/btracey/optimize

What would error be in return of Err()? A fancy string of the type name? Users can already handle an early status by direct comparison with the Status value.

result, err := opt.Minimize(blah)
if err != nil{
// handle
}
if status.Early(){
    if status == opt.FunctionEvaluationLimit {
         // log something, try again with more iterations
    }
}