L-BFGS-B Implementation

Very rough at the moment. Uploaded for potential comments/suggestions.

********* PEOPLE *************
Primary reviewer: @sc932 

Reviewers: @suntzu86 

********* DESCRIPTION **************
Branch Name: denizokt_228_implement_LBFGSB
Ticket(s)/Issue(s): Closes #228 

********* TESTING DONE *************
make test
Now that you're doing a relative shift, 1.0e-16 is actually very, very unsafe. You're getting "lucky" here b/c:
```
1.0 - 1.0e-16 - 1.0 = -1.1102230246251565e-16
and
1.0 + 0.5e-16 - 1.0 = 0.0
```
So you're relying on rounding behavior (this is in fact a reliable behavior as long as you're in IEEE-754 double precision, but relying on that is unsafe).

Instead, use: ```numpy.finfo(numpy.float64).eps```. That's machine epsilon for the specified type. That is the smallest relative difference that can be reliably represented. It's ```2**-52 ~ 2.22e-16```