Implement autograd (automatic backpropagation)
An autograd automatically compute the gradients of complex operations by decomposing it in basic ops. It allows great flexibility to create new neural network layers as people don't need to compute the gradient by hand.

An autograd for scalar values can be found in [Nim-rmad](https://github.com/mratsim/nim-rmad)

## Architecture considerations
It uses a sequence of closures to construct the list of operations to backpropagate through.
The usual solution in deep learning framework is to implement each operation as a class/object with a forward and backward method.

Compared to the usual solution Nim-rmad avoids dynamic dispatch and many indirections. However it is at the price of ease of use and extensibility by data scientists and researchers.

The final goal is to implement the autograd through Nim concept and [VTable](https://nim-lang.org/docs/manual.html#generics-vtable-types) (vtref and vtptr).
The "AutogradOp" concept will implement and `forward` and `backward`.

## Completely stuck today 😿 
Unfortunately, while waiting for the VTable implementation (target: August or so according to Araq on IRC) I can't implement a prototype with closure or method due to `static` bugs:
- closure: https://github.com/nim-lang/Nim/issues/6077
- method: https://github.com/nim-lang/Nim/issues/6078