Reland: Support pass BCP art/vdex/oat files by FD

The original implementation in odrefresh generated inconsistent number
of files between jars and other files. The code is reworked.

Original description:

This is currently used by odrefresh.

Main runtime changes are:

1. When reading the image header, also tries to read from the FD if
   provided.

2. Initialize the art/vdex/odex FDs in the boot image chunk if provided.
   This allows them to be opened (in case if the file is not accessible
   by path) in LoadComponents.

3. OpenBootDexFiles: accept BCP JARs passed as FD, in case if the file
   is not accessible by path.

4. The new FDs are passed from new runtime args,
   -Xbootclasspath{art,vdex,oat}fds.

It is used in odrefresh to pass the previous output of BCP extensions to
be used in the next phase, system server compilation.

Bug: 193720426
Test: odrefresh --use-compilation-os=10 --force-compile # exit 80
      odrefresh --verify # exit 0 (was 79 previosly)
Test: Verify the checksum of output files are the same, with
      --use-compilation-os or not, i.e. regardless where the compilation
      happens
Test: mma in art/
Test: odsign_e2e_tests
Change-Id: Ie3ae48c7d70a2779cfbd80b307199a0f327c895c
14 files changed