Move DerivativeMaterialInterface into framework

Also adds a more specific test for the naming convention which explicitly tests if the derivatives are taken in normalized (alphabetical) order (i.e. d2F/dadb == d2F/dbda). Closes #4299.
Wow that's amazing. I have the same combination on my luggage!