Implement #pragma clang final extension
This patch adds a new preprocessor extension `#pragma clang final`
which enables warning on undefinition and re-definition of macros.
The intent of this warning is to extend beyond `-Wmacro-redefined` to
warn against any and all alterations to macros that are marked final.
This warning is part of the `-Wpedantic-macros` diagnostics group.
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D108567