This commit adds bugprone-reserved-identifier, which flags usages of __names _Like ::_this, which are illegal in user code. The check can also be inverted to flag any names that are not reserved, which would be useful to e.g. standard library implementors.
A large part of this diff is factoring out a big chunk of logic from readability-identifier-naming into a shared base class that is also used by this new check. I strongly considered simply adding this new check's logic to readability-identifier-naming instead of introducing a new separate check, but I decided that this check's goals are orthogonal to that one: this one seeks to flag UB, where readability-identifier-naming is concerned with style. It is also desirable to be able to enable/disable one and not the other and configure them separately.
The new base class will hopefully make adding any further new "renamer" checks in the future a breeze.
Adding some libc++ reviewers to see if they think this would be useful for their workflow in its current form, or if they have any feedback regarding a different approach. I admit the "Whitelist" option for not flagging legitimate identifiers is a bit cumbersome, but I wasn't sure of a better way.
Please include vector and llvm/Optional.h.