Apply top and bottom boundary conditions in extruded LHS assembly

PETSc throws away entries to the matrix if their index is negative.
However, in the extruded case the map is implicit rather than explicit
with map values other than for the bottom layer built by adding offsets.
We therefore cannot throw away entries by messing with the map before we
hit the generated code.  Instead, add a flag to the iteration space
indicating whether boundary conditions should be applied on the bottom
or top layer (or both) and temporarily point the appropriate map values
to negative indices for these cases.