Sweep interpreter caches using checkpoint during GC

Interpreter caches are mutator thread-local caches. Currently, the way
GC sweeps these caches breaks that invariant and requires
synchronization for correct behavior.

In this CL we take a different approach of sweeping the caches
during GC using checkpoint (or in a stop-the-world pause),
eliminating the need for synchronization.

Bug: 235988901
Test: art/test/testrunner/testrunner.py --host --debug --interpreter
Change-Id: I8e8bbfc2d424bdce9c1c8c662782febe18678193
14 files changed