Reduces the large amount of duplicate for the five different Matrix Free operators by restructuring the code based on the operation dimension then the shape type. Relies on preprocessor defines for the dimension and the shape so to reduce the code bloat as best as possible at compile time. Also removes shape type conditionals at run time.
None of the top level classes have changed just everything under the hood.
All of the units tests pass locally.
At this point this merge request is to see if the nightly tests all pass. Will change it to a draft.