Introduce some workarounds for MSVC:
- Need to expand variadic macros explicitly
- Adjacent parameter packs in function templates not supported; use nested
structs instead
- Can't use default parameters in template definition if not present in
declaration
Some improvements to the kernel dispatch:
- Run is now a static member function (don't need to call Get)
- DIM is not treated differently from the other parameters
Also replace many instances of GetElementTransformation(0) with
GetTypicalElementTransformation() and instances of GetElementGeometry(0) with
GetTypicalElementGeometry().
Remove some "early returns" in PA code with empty partitions. The reasoning is
that the early returns create divergent code paths among different MPI ranks,
which can cause deadlocks if e.g. collectives are used in code paths on not all
ranks.