Adjoint dirichlet

This isn't ready to merge yet (we've triggered at least two independent bugs when trying to exercise the new functionality), but it ought to be ready for others to start testing to make sure the refactoring here hasn't broken any old functionality.  In particular I'd appreciate any DirichletBoundary users running their test suites against this branch; it passes all my tests but I'm not sure if my coverage is extensive enough.