Update native GC roots page-by-page

This CL enables updating native GC-roots during compaction page by
page. It does so by using a single-space linear allocator for allocating
ArtMethods/ArtFields/DexCache etc. and using a per-object header to
describe the kind of object/array and its size. Under the hood it still
uses arena allocator but the arenas are page-aligned regions taken from
a single-space.

This allows us in a future CL to use userfaultfd to protect this space
during the compaction pause and then concurrently update the pages
independently.

Cherry-pick merge conflicts: since 2043-reference-pauses test being not
there on this branch, so there was a minor conflict in
test/knownfailures.json. Resolved by removing the entry for the test.

Bug: 160737021
Test: ART_USE_READ_BARRIER art/test/testrunner/testrunner.py --host
Change-Id: Ie52243741360f6008feccec76117d34c77ab1dcf
(cherry picked from commit 606bd949a021edc3a5cb2f3adf650956fb3f32d0)
Merged-In: Ie52243741360f6008feccec76117d34c77ab1dcf
23 files changed