migrate from `exchange_malloc` to `allocate`

This is now only used internally by the compiler.
alter `exchange_free` for sized deallocation

The support for sized deallocation is nearly complete. The only known
missing pieces are `Box<str>`, `Box<[T]>` and `proc`.
auto merge of #14322 : thestinger/rust/secret_santa_heap, r=alexcrichton