Added LBFGS. Revisited interface.

* Now using strategy based pattern instead of policy based
* Added class shared_pointer
* Defaulted to LBFGS