Release notes
--------------
* MPI support:
- Python-level: MPI-distributed NumPy arrays.
- C-level: code generation for sub-domains, staggered grids, operators with coupled PDEs.
- C-level: performance optimizations (e.g., computation-communication overlap).
* Lazy evaluation of derivatives.
* Revisited staggered grids API (now Dimension-based, previously mask-based).
* Re-engineered clustering (which means smarter loop fusion/fission).
* DSE: Improved aliases detection.
* DLE: OpenMP nested parallelism; hierarchical loop blocking.
* Auto-padding for Functions/TimeFunctions.
* Improved data dependency analysis.
* Smarter Operator auto-tuning.
* New tutorials: Operator application, MPI, new propagators, custom stencils, and more.
* Revisited benchmarking scripts.
* Revisited examples, new models and propagators (e.g., visco-elastic).
* Smarter continuous integration: now Travis sided by Azure Pipelines; dropped Jenkins.
* Misc bug fixes.
* Hundreds of tests added.
* More sophisticated platform auto-detection.
* Update in checkpointing (via PyRevolve) to significantly reduce memory consumption and overall runtimes. Not backward compatible.
* Experimental support for lossy compression of checkpoints through PyRevolve + ZFP.