LBFGS code

- add LBFGS optimizer
- make stupid gradient descent code use similar API
- add numpy headers in setup.py