made sure that an optimized get can happen if the sparse vector is optimized and added a getter for the dimension of the sparse vector.
More Refactoring - removed some type parameters

1. The optimize module now works exclusively on dense arrays, this
    simplifies the code.

2. Made the booleanLoss function in HingeLoss a public static so
   that we can use it in different places.
changed exception to UnsupportedOperationException to prevent some jvm warnings
added bounds check and throw an array index out of bounds
fixed test to support refactoring in the optimize package
optimized imports globally
added more unit tests for sparse vector behavior
added the ability to create sparse vectors from dense vectors
made printing weights and setting printing status public methods
fixed typo in test
Dataset Extensions & Refactoring

1. Added an abstract class AbstractDataset, that given a classifier can
   compute training error.

2. Added a sparse dataset adapter for testing, which given a dense
   dataset can convert it to a sparse dataset.

3. Modified DiabetesDataset to extend from the abstract dataset, so
   when we are testing sparse svms, we can use the same dataset with our
   adapter.
Sparse SVM

1. An implementation of sparse hinge loss (so we can compute hinge loss
   on sparse datasets.

2. An implementation of sparse svm classifier that can use sparse
   datasets (and features).

3. An implementation of a trainer over sparse datasets which simply uses
   our sparse hinge-loss to generate a sparse classifier and a spec to go
   along with it (which is evaluated against dense svm trainer).