Only apply culling optimisation when selecting a small slice
Only apply culling optimisation when selecting a small slice

dask_getitem is used for both first- and second-stage indexing in
DaskLazyIndexer. When first-stage indexing keeps all (no `select`) or
most (e.g. `scans=track`) of the data, the culling is not particularly
useful, very slow, and might be harmful as it throws away the
highlevelgraph structure. So only apply it when the number of blocks is
reduced by at least 50%.

Also ensure that the replacement graph is a HighLevelGraph - dask
doesn't currently do it automatically, unlike the da.Array constructor.

ska-sa/katdal