Add backpropagation optimizers
Currently only stochastic gradient descent is supported, at the very minimum it would be nice to support:

- [ ] RMSProp
- [x] Adam
- [x] SGD with Momentum
- [x] SGD with Nesterov Momentum
