This contains the initial part of the implementation for the C++20 likelihood attributes.
For now it only handles them in an IfStmt, I want to add support for other statements after this one is done.
I was unsure whether it's preferred to have one patch for both the Sema and CodeGen part. If wanted I can split them easily.
Hmm, I'm on the fence about specifying 201803 for these attributes. Given that this is only the start of supporting the attribute, do we want to claim it already matches the standard's behavior? Or do we just want to return 1 to signify that we understand this attribute but we don't yet fully support it in common cases (such as on labels in switch statements, etc)?
As another question, should we consider adding a C2x spelling [[clang::likely]] and [[clang::unlikely]] to add this functionality to C?