Make par_loops properly collective again

On CPUs, code compilation is now a collective operation (we only build
the code on rank zero).  As a result, we can't short circuit
computations for zero-sized sets since we may be left with an empty code
cache.

On device backends, _compute now returns early if the partition is zero
sized, since the Plan does not know how to deal with zero sized
partitions.