Support compiling partial system server jars.

Before this change, odrefresh compiles system server jars atomically.
After this change, odrefresh can compile only the system server jars
whose artifacts are missing. This can benefit users in couple ways:
1. When a previous odrefresh run failed due to low storage space,
subsequent runs can continue from the failure point instead of starting
over.
2. When we update odrefresh to compile more things before a change has
been made to the build system to preopt those things at build-time
(e.g., b/203198541), this change can avoid too much regression on the
first boot time by not compiling things that are already preopted.
3. When some artifacts are missing from the system image for unknown
reasons, this change can avoid too much regression on the first boot
time. (This should rarely happen because artifacts' existence is checked
at built-time.)

This CL also includes some minor changes:
1. Introduce a struct `CompilationOptions` to represent what to compile
in a more structured way.
2. Update the comments about compilation space estimation based on the
latest observation.
3. Improve the boot animation progress reporting to reflect the real
number of compilations.
4. Fix the exit code returned on low storage space. (Was `kOkay`, which
was wrong because odsign does not sign artifacts on `kOkay`)

Bug: 203198541
Test: atest art_standalone_odrefresh_tests
Test: odsign_e2e_tests
Change-Id: Id13fa26fa2327a82daff8d8d6fdefe11cd0928a2
7 files changed