Reduce fragmentation from m32_allocator
This patch brings in two improvements:
a) m32_allocator will now reuse the pages that are no longer
used by anyone else.
b) m32_allocator will preallocate the "filling" area,
so that the pages it allocates end up as a big chunk
instead of being allocated on demand in random places,
fragmenting the precious lower 2G address space.
Test Plan: testsuite - 3 tests failing with substTy asserts
Reviewers: ezyang, austin, bgamari, erikd, hsyl20, simonmar
Reviewed By: hsyl20, simonmar
Subscribers: hvr, thomie
Differential Revision: https://phabricator.haskell.org/D1976