Use correct PETSc pre-allocation for MPI matrices

It turns out mat.createAIJWithArrays does not play well with sparsity
caching, since PETSc renumbers off-diagonal column indices once they
have been passed to MatCreateMPIAIJWithSplitArrays s.t. the sparsity
is altered if this method were used.

Instead we use MatMPIAIJSetPreallocation and determine the number of
diagonal and off-process non-zero entries beforehand, instead of
building a complete CSR structure. We therefore provide separate
sparsity building routines:

* build_sparsity_pattern_seq builds a full CSR structure for use with
  mat.createAIJWithArrays and all memory is allocated and managed by
  PyOP2. The sparsity contains rowptr, colidx, nz and nnz.
* build_sparsity_pattern_mpi only determines the non-zeros per row to
  be passed to mat.createAIJ. The sparsity contains nz, onz, nnz and
  onnz.

The sparsity object provides properties rowptr, colidx, nz, onz, nnz
and onnz, which are 0/empty if not set by the sparsity building
routine. nz was previously called total_nz, nnz was d_nnz.

Set exec_size in the op_map_core data structure according to the PyOP2
semantics i.e. the executed region of a set is the sum of of core size
and exec size. This property is used when building the MPI sparsity so
off-processor contributions get correctly accounted for.