Cleanup LagrangeSimplexLocalCoefficients
The implementation of LagrangeSimplexLocalCoefficients
is very cluttered and inconsistent:
 Construction from permutation needlessly throws for dim=1.
 Text of thrown exceptions is misleading or incorrect.
 For dim>3 compile time failure should be preferred.
 Code duplication for dim=2: Constructor from permutation uses ´generateLocalKeys()` while default constructor is implemented separately.

LocalKey
generation for dim=1,dim=2,dim=3 are spread over multiple methods, dim=2 and dim=3 are implemented very differently. 
LocalKey
generation code is completely undocumented. While dim=2 is easy to understand, this is not true for dim=3. 
generateLocalKeys()
needlessly takes a itsstd::array
argument by value.  Ordering/position of Lagrange points is not documented.

LocalKey
ordering of surface DOFs is not documented. 
Semantics of permutation interface is not documented property:

Is
vertexMap
a forward or backward permutation?  How do the obtained finite elements differ?

Which invariants (persubentity
LocalKey
ordering) are guaranteed? 
This should also be documented in the
LocalSimplexFiniteElement

Is
Some of these are easy to fix. However, most need a deeper look into the code, maybe some refactoring of the 3d code, and careful testing.