This mimicks the implementation of the libstd++ and libc++ std::unique_ptr
formatters.
This has been attempted several years ago in
0789722d85cf1f1fdbe2ffb2245ea0ba034a9f94 but was reverted in
e7dd3972094c2f2fb42dc9d4d5344e54a431e2ce.
The difference to the original patch is that we now maintain
a $$dereference$$ member and we only store weak pointers
to the other children inside the synthetic frontend. This is
what the libc++ formatters do to prevent the recursion mentioned
in the revert commit.
This patch addresses https://github.com/llvm/llvm-project/issues/62825