[WIP] Implementing Averaged SGD

Working on implementing averaged SGD for both classifier and regressor for #543
I ran into a hiccup trying the nnz implementation. Let's say you have ``` x = [[1, 1 ][0, 0]]``` and ```y = [1, 1]``` you can find that after iterating through the data represented as both sparse and dense that the weights and average weights should be ```w = [1, 1]``` and ```aw = [1, 1]``` with ```eta = 1``` and ```dloss(p, y) = y - p```. However, because the value of nnz is 0 in the second iteration, the weights aren't re-added so the final average weights are ```aw = [.5, .5]```. Is the implementation I described what you had in mind?