Move DerivativeMaterialInterface into framework

Also adds a more specific test for teh nameing convention which explicitly tests if the derivatives are taken in normalized (alphabetical) order (i.e. d2F/dadb == d2F/dbda). Closes #4299.