Stop-the-world compaction phase

The CL implements the core logic for per-page compaction, but in
a stop-the-world pause. Even though it's performed during a pause, it
handles every page independetly as the final goal is to have a
concurrent implementation.

This CL doesn't handle updating the native roots. Also, the black
allocations since the marking-phase pause are not handled yet.

Test: art/test/testrunner/testrunner.py
Bug: 160737021
Change-Id: Ib0be20663e0f9f76ee66a2a42180c4bd3579e41b
(cherry picked from commit 528b169d1351f3606778ba10fe9ae8fcecf7a7c4)
Merged-In: Ib0be20663e0f9f76ee66a2a42180c4bd3579e41b
12 files changed