Pull in our fftfreq simplifications from upstream
Pull in our fftfreq simplifications from upstream

Backports some changes we made to Dask's `fftfreq` into our `_compat`
version of `fftfreq` to generally clean up the `fftfreq` implementation.
Not only does it simplify the implementation, it seems to speed it up in
some cases.

Switched to using `map_blocks` and a custom Python function, which is
applied over `arange` to implement `_fftfreq` internally. This makes the
overall implementation cleaner and simpler. Also avoids needing various
chunking related tricks. Plus it appears this goes a bit faster than the
old implementation. How much faster seems to depend on the size of the
frequency range and the size of the chunks.

ref: https://github.com/dask/dask/commit/2b2d9f9ddd00e6eea1655b3362d701293db40659

dask-image/dask-ndfourier