Major FEMSystem, adjoint dirichlet refactoring

This isn't done yet, but it's at the point where it should once again
be passing regression tests with existing FEMSystem code.

Basically there's no way to properly apply a heterogenous constraint
using an already-constrained system matrix, so we need to move the
adjoint constraint calculations into the qoi derivative loop, and
recompute element matrices as needed.