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.
Merge pull request #340 from OP2/fix/parallel_compilation

CPU code compilation is collective and therefore compute calls in the
par_loop must all hit the compilation code path, even if the iteration
space is zero-sized.