cleanup boundary conditions
This MR attempts to simplify the boundary condition interface by providing:
- an abstract interface
- more documentation
- clearer function names
- deduction for some template arguments
The introduction of virtual functions requires additional template arguments
Mat, Sol, Rhs. Those may be removed later with the change to local application of constraints.