Fix an unnecessary use of `cast::transmute`

Wherever possible, more specialized variants of said functions should be used,
such as in this case `cast::transmute_mmut_unsafe`.
auto merge of #13343 : tbu-/rust/pr_smallfix, r=pcwalton

Fix an unnecessary use of `cast::transmute`

Wherever possible, more specialized variants of said functions should be used,
such as in this case `cast::transmute_mmut_unsafe`.
syntax: add a custom owned smart pointer in ptr::P.
syntax: ast: replace @T with P<T>.
syntax: fold: use move semantics for efficient folding.
syntax: ast_map: use raw pointers into the AST.
syntax: fix fallout from using ptr::P.
syntax: tests: fix fallout from using ptr::P.
rustc: fix fallout from using ptr::P.
rustdoc: fix fallout from using ptr::P.
syntax: implement in-place folding of P<T> and Vec<T>.