Remove finalizable restriction on structural redefinition

Previously we restricted performing structural redefinition of classes
with finalizers. We did this because we need to be careful that
finalizers are not run on any obsolete objects and are run on the
replaced objects. This fixes these issues and removes the restriction.

Note that the objects of classes that were initially non-finalizable
and then redefined to be finalize able will never be called. This is
(technically) compliant with the spec and avoids issues around safely
creating finalizer references. See comment in ti_redefine.cc for more
information.

Test: ./test.py --host
Bug: 134162467
Change-Id: I51d4de3d15833dce989cd1e44c32b0e6a57f063a
18 files changed