Allow interpolation on a subset
Document boundary edges in UnitSquare
Document boundary edges in UnitCubeMesh
Eliminate temporary in Expression
Correct error checking for Expression interpolation

Previously we were first checking whether the expression rank and
shape matches that of the function space. This was causing the wrong
error message for spaces that don't support point evaluation and
therefore one needs to use projection instead.

We initially make sure that we have an expression with a value for
each component in the value shape for each function space.
DirichletBC constructor correctly deals with Expressions

Previously we only supported literal constants or Functions as
boundary expressions. Add support for Expressions, which are either
interpolated or projected onto the function space, depending on
whether or not it supports pointwise evaluation.
Reconstruct products via the * operator in expression splitter

Reconstructing ufl.algebra.Product will fail if one of the operands
has a non-empty shape i.e. is e.g. a coefficient on a vector-valued
function space such as BDM.
Minor clean up of boundary extraction
Support lists of markers in facet subsets and DirichletBC

Build a cache of marker ids -> subsets for any given iterable of
markers as they are requested.
Zero rows in all diagonal blocks of a MatNest