[Clang] Add diagnostic for why std::is_abstract is false (#156199)
Explain why a type is not abstract. Handles arrays, refs, unions,
pointers, and functions. If the non-abstract type has abstract base
classes, point out that their pure virtual methods must have been
overridden.
Adds onto #141911