MAINT: avoid redundant evaluation of user-provided function in l-bfgs-b optimization

closes https://github.com/scipy/scipy/issues/4076
Have you considered adding `**kwargs` to `approx_fprime` instead of adding this helper function?
I seems to me that somthing like that would work:
```
def approx_fprime(xk, f, epsilon, *args, **kwargs):
     f0 = kwargs.pop('f0', None)
     if kwargs:
         raise TypeError('unepected keyword arguments: %s' % ', '.join(kwargs.keys()))
     if f0 is None:
         f0 = f(*((xk,) + args))
```