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

Yeah, I'm not completely happy with the naming - but it's blocked by the interface type names (FunctionOnly|GradientOnly is arguing against itself - I was thinking FunctionEval|GradientEval as possible contendors).

Adding HessianFoo doesn't change the use of `|` it just changes how we construct the consts - `1 << iota` construction for the single bit cases, `0` for the NoEvaluation and `|` for the  3 compound cases).