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
>  RefCell and/or Cell should be used here where appropriate

Okay! I will try to change it later today/tomorrow. Should I just rebase and then `push --force`?

> you can preserve recursive allocation

I don't think the current tests would catch if this wasn't preserved. Should I include a few to enforce this in this same PR?