v0.4.2

Making progress towards v0.4.0 goals.

- Functions are moved from projected_gradients to matg_gdm.
- Both have identical return types, although matg_gdm does not take
  desired_gap as argument.
- test_scale_invariant ensures that the solver can handle rewards in
  [0,\infty). This was a really interesting bug in ExtendNE.
- API cleanup has also been done: removing unnecessary `num_actions`
  argumetns when they can be deduced, especially in utils.py.
- algorithm.py has also been cleaned up; intermediate functions have
  been removed/inlined when needed, stray jit calls have been pruned.
- some more use of jaxtyping as well.

TODO:
- Experiments and benchmarks are broken, might need fixing later.
- Consider wrapping all algorithm parameters in chex DataClasses.
- Expand the test-suite.