Refactor SGD options into a new class.

This refactoring pulls out code shared between SVM, Lasso, LR into a common GradientDescentOpts class.

The main motivation behind this is two-fold:
a. Share code among different algorithms which use SGD (like Lasso, SVM etc.)
b. Set things up so that we can add different optimizers for the same algorithm in the future (for example SVM using ADMM and not SGD).
 
@mateiz - Could you take a look to see if this makes sense ? 

@atalwalkar @etrain - This is the first part of the refactoring we talked about -- I'll get to refactoring the algorithms, models next. Also I didn't actually create a type hierarchy for the optimizer options in this PR. That should be simple to add once we have a second optimizer though.