Remove & -> &mut transmutation from libarena

Changes both `Arena` and `TypedArena` to contain an inner struct wrapped in a `Unsafe`, and change field access to go through those instead of transmuting `&self` to `&mut self`.

Part of #13933
My understanding is that, when a given function is inlined in the caller, the parameters of the call don't need to be copied anymore, as there's no new stack context. Is that correct?

If that's the case, could we just mark `alloc_copy` and `alloc_noncopy` with `#[inline(always)]` to mitigate/remove the copy overhead, and thus be able to pass the object by value without a performance regression?