Rollup merge of #23844 - kvark:try_unique, r=alexcrichton
Rollup merge of #23844 - kvark:try_unique, r=alexcrichton

While trying to implement parallel ECS processing, I stumbled upon the need to mutate `Arc` contents. The only existed method that allowed that was `make_unique`, but it has issues:
  - it may clone the data as if nothing happened, where the program may just need to crash
  - it forces `Clone` bound, which I don't have

The new `try_unique` allows accessing the contents mutably without `Clone` bound and error out if the pointer is not unique.

andars/rust,zubron/rust,jroesch/rust,jashank/rust,zubron/rust,gifnksm/rust,aidancully/rust,jroesch/rust,nwin/rust,dwillmer/rust,ebfull/rust,graydon/rust,nwin/rust,GBGamer/rust,robertg/rust,ebfull/rust,ruud-v-a/rust,ruud-v-a/rust,jroesch/rust,GBGamer/rust,l0kod/rust,carols10cents/rust,aepsil0n/rust,krzysz00/rust,ejjeong/rust,omasanori/rust,aepsil0n/rust,aidancully/rust,nwin/rust,robertg/rust,avdi/rust,miniupnp/rust,l0kod/rust,KokaKiwi/rust,ejjeong/rust,jashank/rust,XMPPwocky/rust,mvdnes/rust,mihneadb/rust,omasanori/rust,l0kod/rust,ruud-v-a/rust,TheNeikos/rust,seanrivera/rust,cllns/rust,graydon/rust,pshc/rust,victorvde/rust,pelmers/rust,zubron/rust,pelmers/rust,pelmers/rust,omasanori/rust,andars/rust,dwillmer/rust,nwin/rust,KokaKiwi/rust,cllns/rust,jroesch/rust,TheNeikos/rust,jroesch/rust,andars/rust,miniupnp/rust,robertg/rust,zachwick/rust,cllns/rust,dwillmer/rust,avdi/rust,jroesch/rust,aneeshusa/rust,pelmers/rust,jashank/rust,l0kod/rust,victorvde/rust,reem/rust,seanrivera/rust,graydon/rust,zubron/rust,mvdnes/rust,mvdnes/rust,gifnksm/rust,mvdnes/rust,jashank/rust,zubron/rust,philyoon/rust,XMPPwocky/rust,robertg/rust,l0kod/rust,TheNeikos/rust,mdinger/rust,kwantam/rust,dwillmer/rust,KokaKiwi/rust,KokaKiwi/rust,ruud-v-a/rust,XMPPwocky/rust,aneeshusa/rust,vhbit/rust,victorvde/rust,zachwick/rust,cllns/rust,aidancully/rust,robertg/rust,mihneadb/rust,mdinger/rust,mvdnes/rust,pelmers/rust,pshc/rust,seanrivera/rust,aepsil0n/rust,krzysz00/rust,mihneadb/rust,miniupnp/rust,vhbit/rust,GBGamer/rust,zaeleus/rust,carols10cents/rust,pshc/rust,sae-bom/rust,avdi/rust,zubron/rust,gifnksm/rust,krzysz00/rust,aneeshusa/rust,aidancully/rust,ejjeong/rust,krzysz00/rust,zubron/rust,kwantam/rust,reem/rust,TheNeikos/rust,vhbit/rust,graydon/rust,zaeleus/rust,zaeleus/rust,graydon/rust,l0kod/rust,mdinger/rust,aidancully/rust,rohitjoshi/rust,avdi/rust,philyoon/rust,graydon/rust,philyoon/rust,reem/rust,reem/rust,mdinger/rust,pshc/rust,carols10cents/rust,sae-bom/rust,victorvde/rust,jashank/rust,jashank/rust,seanrivera/rust,gifnksm/rust,omasanori/rust,ejjeong/rust,miniupnp/rust,XMPPwocky/rust,miniupnp/rust,KokaKiwi/rust,aneeshusa/rust,pshc/rust,ruud-v-a/rust,zaeleus/rust,aneeshusa/rust,carols10cents/rust,rohitjoshi/rust,cllns/rust,sae-bom/rust,philyoon/rust,l0kod/rust,TheNeikos/rust,KokaKiwi/rust,XMPPwocky/rust,mdinger/rust,ebfull/rust,rohitjoshi/rust,seanrivera/rust,zachwick/rust,avdi/rust,carols10cents/rust,GBGamer/rust,dwillmer/rust,aidancully/rust,robertg/rust,jashank/rust,vhbit/rust,aepsil0n/rust,GBGamer/rust,sae-bom/rust,GBGamer/rust,zachwick/rust,dwillmer/rust,andars/rust,philyoon/rust,seanrivera/rust,reem/rust,krzysz00/rust,aepsil0n/rust,nwin/rust,andars/rust,gifnksm/rust,dwillmer/rust,miniupnp/rust,GBGamer/rust,jroesch/rust,vhbit/rust,vhbit/rust,XMPPwocky/rust,jashank/rust,pshc/rust,TheNeikos/rust,l0kod/rust,GBGamer/rust,mihneadb/rust,reem/rust,zubron/rust,philyoon/rust,kwantam/rust,miniupnp/rust,dwillmer/rust,rohitjoshi/rust,mihneadb/rust,nwin/rust,vhbit/rust,ejjeong/rust,avdi/rust,zaeleus/rust,krzysz00/rust,carols10cents/rust,rohitjoshi/rust,zachwick/rust,pelmers/rust,cllns/rust,ebfull/rust,nwin/rust,zachwick/rust,ejjeong/rust,ruud-v-a/rust,aneeshusa/rust,jroesch/rust,mvdnes/rust,kwantam/rust,sae-bom/rust,sae-bom/rust,pshc/rust,ebfull/rust,aepsil0n/rust,omasanori/rust,mdinger/rust,andars/rust,gifnksm/rust,victorvde/rust,rohitjoshi/rust,kwantam/rust,omasanori/rust,vhbit/rust,zaeleus/rust,pshc/rust,victorvde/rust,nwin/rust,mihneadb/rust,kwantam/rust,ebfull/rust,miniupnp/rust