Partial boundary integrals and strong boundary conditions

This branch implements boundary integrals over parts of the boundary, and strong boundary conditions.

* Compiled expressions can now be passed an OP2 subset and will only be applied on that subset (in a future development, this subset will be encapsulated in a Firedrake Subdomain object).

* cell_node_map, exterior_facet_map and interior_facet_map now take an bcs argument, which must be a list of boundary conditions. If this is not empty, the map returned will take negative values on the corresponding boundary condition nodes. This facilitates the imposition of strong bcs.

* A subsetted measure (e.g. *ds(1)) will cause integration only over the correspondingly marked boundary region.

* LinearVariationalProblem and LinearVariationalSolver have been removed and replaced with thin wrappers around the corresponding nonlinear objects.