Ensure structural redefinition can shadow functions/fields

Previously when we structurally redefined a class and a new field or
function shadowed a super type field or function the shadowed version
might still get called. This was due to the old version remaining in
the dex-caches of other classes. To fix this we just remove from all
dex-caches any entries that might be (invisibly) shadowed by a new
function/field. This is any non-virtual methods or non-private field
of a supertype of the redefined class with the same name & signature
as a method/field in the redefined class.

Test: ./test.py --host
Bug: 134162467

Change-Id: Iae8e7a3e7f8ecedbd2f314816b140156fce3e5fd
17 files changed