Apply some LLVM_READONLY / LLVM_READNONE on diagnostic functions
Use token kind instead of '%select{.|->}0' in diagnostic
Diagnose enum redeclarations properly

In all three checks, the note indicates a previous declaration and never a 'use'.

Before:

  enum-scoped.cpp:92:6: note: previous use is here
    enum Redeclare6 : int;
         ^

After:

  enum-scoped.cpp:92:6: note: previous declaration is here
    enum Redeclare6 : int;
         ^