use emplaceRef in join

And remove old internal `trustedAllocateArray`.
`uninitializedArray` is already trusted.
See also #2746 
I'm a bit shocked this works. If `E` has an indirection, then `uninitializedArray` is (should be) unsafe. Either have no test case that covers this (which means this accidently breaks existing safety promises), or `uninitializedArray` is always safe? The latter would surprise me, as I remember going to great lengths to ensure it wasn't if it had indirections...