Add test for Global with no data in initialiser
Fix use of Globals initialised without data buffer

op2.Global objects declared without providing a data space were never
acquiring that space for themselves. Port the magic allocation code from
Dat to accomplish this.
Allow overriding default configuration from environment

Each default configuration setting has an associated environment
variable used to override the default if present in the environment
at configuration time.
Configuration respects PYOP2_LAZY, PYOP2_MAX_TRACE_LENGTH
Convert config environment variables to expected type
Move configuration to its own module
Merge pull request #267 from OP2/267-set-config-from-environment

Allow overriding default configuration from environment.

* Configuration respects PYOP2_LAZY, PYOP2_MAX_TRACE_LENGTH
* Convert config environment variables to expected type
* Move configuration to its own module
Use mixin for Dat and Global instantiation

The magic incantation for lazy allocation of data buffers for Dats and
Globals is the same, so refactor into a mixin.
Add test that Globals are implicitly initialised to zero

If the user doesn't pass a data buffer into Global initialisation, it
should be initialised to zero when accessed.
Separate read and write intent in _force_evaluation

Previously, _force_evaluation evaluated all dependent computation.
Add arguments that specify whether the intent is to only force
computation that depends on reads or writes or both.
Merge pull request #266 from OP2/global-data-fix

Fix use of Globals initialised without data buffer
Fix computation of the size of the vector we scatter into

The local size of each data is dataset.size * dataset.cdim, not
dataset.size.  This fixes a segfault when vecscattering mixed spaces
with vector function spaces in them.
Merge pull request #272 from OP2/fix-vecscatter
Merge pull request #271 from OP2/force-evaluation-fix

Allow separately specifying whether _force_evaluation should force for
reads, writes, or both (defaults to both).
Unblock global to PETSc numbering in parallel case

We currently build the correct global to PETSc numbering maps for
block matrices, but can only assemble into non-block matrices.  So as a
quick fix for assembling on vector function spaces in parallel, use
PETSc routines to build the appropriate unblocked maps.
Fix Mat._is_scalar_field for mixed x Non-mixed case

If one of datasets in a Mat is mixed and the other isn't, the dims
property is something like (x, (y, z)).  So calling np.prod when
determining if the Mat represents as scalar field fails.  Check for
scalar-ness by checking that np.prod of every entry in the tuple is 1
instead.
Merge pull request #273 from OP2/parallel-vfs

Unblock global to PETSc numbering in parallel case.

We currently build the correct global to PETSc numbering maps for
block matrices, but can only assemble into non-block matrices. So as a
quick fix for assembling on vector function spaces in parallel, use
PETSc routines to build the appropriate unblocked maps.
Merge pull request #274 from OP2/is-scalar-field

Fix Mat._is_scalar_field for mixed x Non-mixed case

If one of datasets in a Mat is mixed and the other isn't, the dims
property is something like (x, (y, z)). So calling np.prod when
determining if the Mat represents as scalar field fails. Check for
scalar-ness by checking that np.prod of every entry in the tuple is 1
instead.
Fix the offsets to be applied to the flattened map.
Add new Jacobian computation for extruded element.