Rename dirty slot on Dat to needs_halo_update

The latter more accurately describes what it actually is.
Fix bug in MPI Global reductions

Since we execute a bit of the par_loop (the exec-halo) after kicking
off the reduction across a Global, we must reduce into a temporary
buffer and the copy back after the par_loop has finished completely.
Otherwise our result will be overwritten by whatever happens in the
exec-halo.
Use ._data not .data to pass data pointer to C function

By using the former, we avoid unnecessarily marking a Dat as needing a
halo update.
Move MPI implementation from base to runtime_base

It doesn't make sense to have base implement halo swapping and so
forth, since this requires a runtime, so move the code around
appropriately.