Add a Crouzeix-Raviart implementation with compile-time dimension
The implementation is generic, and the patch adds a unit test that tests all dimensions <= 4.
The implementation is generic, and the patch adds a unit test that tests all dimensions <= 4.