This patch is refactoring the allocation, initialization and deletion of MDNodes. It is intended as a preparatory patch for the upcoming
addition of dynamic resizability of MDNodes. It is fundamentally NFC, but removes the necessity for suppressing the memory sanitizer for
MDNode's operator delete.
Refer to the discussion in D124548 for more context.
The intended usage of SmallVector to handle the operands of "large" and resizable MDNodes seems to require that we define move constructors, copy constructors and the respective assignment operators for MDOperand. I've saved these for a later patch, as they're not required for this one.
The refactoring of operator new() requiring an extra parameter (Storage) is preparatory in the sense that operator new will have to decide whether to allocate a node for resizability based on storage type.
For reference, I dug this up as https://github.com/llvm/llvm-project/issues/24952.