Pass boot class path to ImageSpace::LoadBootImage.

When loading the boot image by ImageSpace, do not rely on
the boot class path (BCP) recorded in the primary boot image
oat file. Instead, check the BCP from image against the BCP
provided by the Runtime, i.e. from -Xbootclasspath:_ or the
environment variable BOOTCLASSPATH. For now, allow Runtime
to extract the BCP from the primary boot image oat file when
we have -Ximage:_ but no BCP.

Also pass the boot class path components down to the OatFile
so that we can open and use the original dex files when we
do not have copies in the vdex files. This allows compiling
app prebuilts when the boot dex files are uncompressed and
aligned in the original jars.

Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Test: Pixel 2 XL boots.
Test: m test-art-target-gtest
Test: testrunner.py --target --optimizing
Test: run-libcore-tests.sh --mode=device --variant=X64
Test: Manually create boot image jars with uncompressed and
      aligned dex files, compile a boot image with dex files
      not copied into vdex files and use this boot image for
      compiling a prebuilt services.{art,vdex,odex}.
Bug: 119868597
Change-Id: If9411ddbecf6bb90bfa9233040931c5e833f6aee
18 files changed