add back jemalloc to the tree

This adds a `std::rt::heap` module with a nice allocator API. It's a
step towards fixing #13094 and is a starting point for working on a
generic allocator trait.

The revision used for the jemalloc submodule is the stable 3.6.0 release.

Closes #11807
add an align parameter to exchange_malloc

Closes #13094
use jemalloc to implement Vec<T>
initial port of the exchange allocator to jemalloc

In stage0, all allocations are 8-byte aligned. Passing a size and
alignment to free is not yet implemented everywhere (0 size and 8 align
are used as placeholders). Fixing this is part of #13994.

Closes #13616
fix Vec<ZeroSizeType>
vec: move some code inside alloc_or_realloc
vec: factor out some deallocation code
gitattributes: rm obsolete jemalloc entry
rename `global_heap` -> `libc_heap`

This module only contains wrappers for malloc and realloc with
out-of-memory checks.