[clang] DeducedTypes deduction kind fix and improvement (#186727)
This is a small refactor of how DeducedType and it's derived types are
represented.
The different deduction kinds are spelled out in an enum, and how this
is tracked is simplified, to allow easier profiling.
How these types are constructed and canonicalized is also brought more
in line with how it works for the other types.
This fixes a crash reported here:
https://github.com/llvm/llvm-project/issues/167513#issuecomment-3692962115