Memory Efficient Backpropagation Through Time
The current Stacked GRU implementation in https://github.com/mratsim/Arraymancer/pull/272 requires a lot of caching.

Here are some memory optimization techniques for backpropagation through-time:
- Audrūnas Gruslys (Google DeepMind), Memory-Efficient Backpropagation Through Time: https://arxiv.org/abs/1606.03401
- Andreas Griewank, Achieving logarithmic growth of temporal and spatial complexity in reverse mode automatic differentiation: https://doi.org/10.1080/10556789208805505

Rust description: https://rufflewind.com/2016-12-30/reverse-mode-automatic-differentiation, section "Saving memory via a CTZ-based strategy"
Rust impl: https://github.com/Rufflewind/revad/blob/de509269fe878bc9d564775abc25c4fa663d8a5e/src/chain.rs