Changes in support of new Domain representation in UFL.

This is considered an infrastructure update, although some
end-user features are introduced and working, e.g.:

  assemble(1*dx(mesh))

A summary of features will be presented at a later stage,
some details may still change during the development.

More importantly, this work lays a foundation for the
symbolic side of future multidomain features.

A summary of the changes:
- Refactoring of assemble functions, most importantly extract
  wrapping of ufl form into dolfin Form as a reusable function.
- Change some expr.cell().d into expr.geometric_dimension() in demos.
- Call geometric_dimension() directly from Coefficient subclass
  instead of going through cell() in Function.
- Rewrite demos to avoid cell.foo notation for geometry. This is to be deprecated.
- Change specialfunctions to use CellVolume(cell) instead of cell.volume notation.
- Avoid ufl cells wherever possible.
- Using e.g. FacetArea(mesh) instead of mesh.ufl_cell().facet_area.
- Deprecating common_cell in Expression and Constant __init__ signatures.
- Use form.empty() and form.integrals_by_type(domain_type), and avoid using variable name 'domains' to mean subdomains.
- Fix domain_data extraction to match new ufl domain model.
- Implement a Mesh.ufl_domain() function, automatically constructing a ufl.Domain object matching the mesh.
- Always reconstruct form with valid domain before passing to ffc jit, avoiding need for common_cell in form data computation.
- Add a bunch of assembler tests, various ways to pass mesh to assembler. Now includes e.g. 1*dx(mesh).
- Add mesh argument to assemble_system and SystemAssembler for consistency in assemblers.
- Fixes in errorcontrol test by reconstructing functional instead of using replace.
- Implement ufl_id() for Mesh, new protocol that allows dolfin to
  tell ufl that two objects are the same when they have different
  python instance because of swig issues.
- Fixes in projection to pass mesh through measure.
Merge branch 'master' into martinal/topic-multidomain-infrastructure2

Conflicts:
	test/unit/fem/python/Assembler.py
	test/unit/fem/python/Form.py
	test/unit/mesh/python/Mesh.py
Use Boost static assert.
Flatten MPI::gather out type.
Remove more boost::mpi.
Remove boost::mpi for MII_Bcast.
Remove boost::mpi for scatter.
Add more const_cast to deal with MPI 1/2 lack of const.
Keep removing boost::mpi wrappers.
Added tests for all claimed functionality in Expression docstrings.
Remove Boost wrapper in dolfin::MPI::all_to_all.
Remove some boost::mpi::send_recv.
Remove some more boost::mpi - just a bit more to untangle.
Remove Boost.MPI. Some testing still needed.
Updates to fix multidomain infrastructure.

- Attach domain=mesh with reconstruct after using eval(signature) on elements.
- Update subdomain data fetching from ufl forms.
- Update Mesh.ufl_domain() for ufl changes.
- Add ufl_id to MeshFunction and update some tests for ufl subdomain_data behaviour.
- Fix doctests.
Mostly working with new MPI wrappers.
Some clean up of MPI in parallel refinement.
Merge branch 'master' into garth/remove-boost-mpi

Conflicts:
	CMakeLists.txt
Merge branch 'logg/fix-issue-228' into garth/remove-boost-mpi
Clean up some MPI code that was pseudo non-blocking.