Create correctly sized PETSc vectors

When running in parallel, the vector is not the length of the entire
Dat.data array.
Tag halo exchanges with the id of the Dat

Do this by saving the Dat._globalcount in an id slot.
Matrix assembly also needs to iterate over the exec halo
Assemble matrix in python

Now that we have a petsc4py matrix handle we can just call
mat.assemble in python rather than generating C code to do so.
Use our own MPI_COMM everywhere

We default to MPI_COMM_WORLD, if we see a halo we check to see if this
is the first one we've seen.  If so, use the communicator we got there
and subsequently check that all halos are defined on the same
communicator.

This may be wrong if halos actually live on a different communicator
than the one we want.  PETSc objects probably still don't live in the
right place.
Expose global (per process) to PETSc (universal) numbering in Halo
Modify PETSc matrix creation to use MatSetValuesLocal

Rather than mapping from global to universal numbers by hand when
inserting into the matrix, just tell PETSc what the mapping is (the
identity if running in serial) and let it figure out the rest.