This change pulls some code from the DirectX backend into a new
LLVMFrontendHLSL library to share utility data structures between the
HLSL code generation in Clang and the backend in LLVM.
This is a small refactoring as a first start to get code into the
right structure and get the library built and dependencies correct.
Fixes #58000 (https://github.com/llvm/llvm-project/issues/58000)
Could we save things like shape and component type instead of a StringRef which needs to be parsed later?