RMSProp learning rule implementation

The implementation is based heavily on the AdaDelta learning rule.  Tests still needed -- should hopefully be able to get around to that over the course of the next day.  

The motivations and math behind RMSProp are described by Geoffrey Hinton at the lecture slides below: http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf.
So, here's an idea for actually detecting the case where this would be a problem, tell me what you think.

Namely, make `self.mean_square_grads` a dictionary mapping parameter names (see other comment re: what to do with nameless parameters) to the shared variables that are currently stored in the list. Then, on each iteration of the loop below (L327), check `if param.name in self.mean_square_grads`, and if so, sorry buddy, error.