@ChrisBeaumont - actually ``_new_cube_with`` is still useful irrespective of the spectral unit thing. It allows a new cube to be instantiated changing only the required parameters. It means if we add more parameters in future, we don't need to complicate the initialization of new spectral cubes in all methods.

The question is, if we allow spectral_unit in the ``__init__`` (which I had in a previous version of this PR) will it then implicitly call ``with_spectral_unit``, and if so do we also need to allow ``rest_value`` to be passed to ``__init__``? The proposed solution here is to actually not change anything for the user API, and just treat it as an internal thing.