Rework support for Domain representation in UFL.

This work involves:
- a new symbolic model of Domains in UFL forms and expressions
- adding some new features for end-users
- deprecating some features for end-users (tried to keep compatibility)
- adding infrastructure for future multidomain features
- changing some of the interfaces used by form compilers
- significant refactoring of some internal code

Sorry for the major squashed commit. Keeping the intermediate state
working with FFC and DOLFIN turned out to be hard and once things
were broken it took a while to get everything working again.

Some of the changes from pre-squashed commit messages:
- Move some helpers into new file checks.py.
- Extract Measure into measure.py.
- Remove calls to measure() and remove Integral.measure().
- Get rid of dim argument to expand_compounds and expand_derivatives.
- Get rid of common_cell and element_mapping arguments to preprocessing.
- Get rid of cell as much as possible and using domain instead.
- Added domains() to Expr and Form types for multidomain support.
- Reimplemented large parts of Measure, Integral, and Form classes.
- Carry domain data (dolfin support feature) with Domain object.
- Remove top_domain and Region concepts.
- Remove DOMAIN_ID_* 'enums', using strings, ints and tuples of ints instead.
- Changes in Form interface for getting integrals.
- Add data to IntegralData about domain and remove from FormData.
- Get rid of cell property access such as cell.d, cell.n, etc. in ufl code. Still works for user code but deprecated.
- Full rewrite of domain analysis and integral data construction.
- Compatibility workaround for dolfin dx[markers] notation.
- Set default log level to deprecate, use proper deprecate function where applicable.
- Implement use of a new ufl_id() protocol such that e.g. dolfin Mesh can
  identify itself as the same object as a dolfin UnitSquare even after
  swig has messed up the python ids.
- Add replace_integral_domains function.
- Add element/domain.reconstruct_signature() function. This is similar to repr but with some nuances.
- Change Domain.data() to be just an object (in dolfin, this will be the Mesh) which implenents ufl_id(). Subdomain data will be associated with Measure->Integral->Form.
Remove hash call in signature_data for geometry.
Fix error formatting.
Bugfix in integration domain reconstruction of forms, and domain numbering where two domains occur with same properties but different label (leading to None-labeled forms being invalid).
Update warning/info messages.
Merge branch 'martinal/topic-multidomain-infrastructure'
Fix typos in docstrings for grad/nabla_grad (should use the same index in grad of a scalar expression).
Add cross-references between grad/nabla_grad and div/nabla_div to make the different versions more easily discoverable.