Add AdaGrad to learning_rule

Implements the AdaGrad learning rule as described in: "Adaptive subgradient methods for online learning and stochastic optimization", Duchi J, Hazan E, Singer Y.

And I noticed there are some redundant code in learning_rule, like:
```
updates = OrderedDict()

        for (param, grad) in grads.iteritems():
```
Should we move these to the base class?
You should write this, we're trying not to merge any new WRITEMEs. It's OK just to say something like "Compute the AdaGrad updates"