Use dynamic polymorphism in mpfa interaction volumes
The mpfa code is super difficult to understand. One thing that makes it additionally complicated is the fact that it allows for two different interaction volume types to be used - because some mpfa methods (like mpfa-l) cannot handle boundary conditions properly. So one approach is to use the o-method at boundaries.
To make it possible to implement such thing, one can define to use different interaction volumes around tagged vertices (default: boundary). But this introduces a bunch of if/else branches that clutter the code.
We could probably get rid of this by using dynamic polymorphism on interaction volumes. The computations to construct an interaction volume and to compute transmissibilities are typically expensive, so I guess the runtime penalty should not matter. We should give this a try to make the mpfa code (at least a tiny bit) less frustrating to read.