Change to use the clang __has_attribute to check for noreturn.

The preferred way to check if clang supports noreturn is to use
__has_attribute(noreturn). Since that doesn't exist except in clang,
we need to define it to 0 for all compilers that don't have it
predefined.