rST markup fixes for pyop2.ir docstrings
Add IR user documentation
Docs: add PyOP2 architecture diagram
Docs: add section on PyOP2 architecture
Docs: describe general par_loop execution steps
Fix TypeError issue with extruded property for Subsets

Simplify extruded property (set a flag to False on Sets, True on
ExtrudedSets) and make Subsets inherit from ExtrudedSets.  This latter
change fixes strange TypeError issues when iterating over Subsets.
Merge pull request #325 from OP2/extruded_property

Fix TypeError issue with extruded property for Subsets

Simplify extruded property (set a flag to False on Sets, True on
ExtrudedSets) and make Subsets inherit from ExtrudedSets. This latter
change fixes strange TypeError issues when iterating over Subsets.
Fix bound of gather loop
Merge pull request #328 from OP2/fix-gather-loop-size

Fix bound of gather loop

Fixes #326
nbytes method on Dat, MixedDat and Global
Add MPI health warning

Make the documentation explict about the fact that nbytes is
process-local.
nbytes attribute for matrices.

Also include a test and fix some defective documentation.
Add an extruded nbytes test.
Merge pull request #327 from OP2/memory_accounting

nbytes attributes
Docs: update backends introduction
Docs: host section for sequential/OpenMP backends
Docs: device section for CUDA/OpenCL backends
Docs: add device data state diagram
Docs: describe state transitions for device backends
Docs: add MPI docs