Slot is a library of a type of memory spaces shaped as a type parametre. It can be used, for example, in a buffer for a stack- or static-allocated Vec-like type (example). It can also serve as an alternative to core::mem::uninitialized, which is deprecandum.
It is similar to core::mem::ManuallyDrop, but getting the value is unsafe, so creating an uninitialized Slot can be safe.
If I call Slot::<Void>::new() (with enum Void{}), then you're creating an instance of an uninhabited type (in a safe method!), so this seems to have the same problems that have put mem::uninitialized on the path to deprecation.
This is why MaybeUninitin the RFC has two variants, like your U enum, not just the one that Slot has.
Is there a reason you didn't just copy MaybeUninit? I'm still confused by things like why Slot::default has a different implementation from Slot::new...