Clean up ImageSpace::LoadBootImage().

Do not rely on data from Runtime::Current(), pass required
parameters explicitly. Move initialization of runtime
methods to ClassLinker, remove the "uninitialization" from
ImageSpace destructor as it's performed just before the
Runtime is destroyed and it is therefore unnecessary work.

This is not a complete cleanup as we still rely on the
Runtime::Current() for zygote and boot image compilation but
it allows imgdiag to load the system boot image directly.
This shall be implemented in a follow-up change.

Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Bug: 77856493
Change-Id: Ic08c2918d726df8d2af3f8803c1673d8216a3da5
diff --git a/runtime/gc/heap.cc b/runtime/gc/heap.cc
index 6f72740..1a611df 100644
--- a/runtime/gc/heap.cc
+++ b/runtime/gc/heap.cc
@@ -372,6 +372,9 @@
                                        image_file_name,
                                        image_instruction_set,
                                        image_space_loading_order,
+                                       runtime->ShouldRelocate(),
+                                       /*executable=*/ !runtime->IsAotCompiler(),
+                                       is_zygote,
                                        heap_reservation_size,
                                        &boot_image_spaces,
                                        &heap_reservation)) {