Check interface assignability strictly for check-cast elision.

Objects are assignable to interfaces in the verifier as described in the long
RegType::ClassJoin comment. Using IsAssignableFrom therefore brought about
a bug where all check-casts where the cast type was an interface were being
elided. Introduce a new strict is assignable from routine that follows the
runtime rather than the verifier is assignable from behavior.

Change-Id: Iac30f71ce9116f2ef16c22acd73eea1c19c79d89
diff --git a/src/verifier/method_verifier.cc b/src/verifier/method_verifier.cc
index 1bb163a..8ca5b82 100644
--- a/src/verifier/method_verifier.cc
+++ b/src/verifier/method_verifier.cc
@@ -3352,7 +3352,7 @@
     RegisterLine* line = reg_table_.GetLine(dex_pc);
     const RegType& reg_type(line->GetRegisterType(inst->VRegA_21c()));
     const RegType& cast_type = ResolveClassAndCheckAccess(inst->VRegB_21c());
-    if (cast_type.IsAssignableFrom(reg_type)) {
+    if (cast_type.IsStrictlyAssignableFrom(reg_type)) {
       if (mscs.get() == NULL) {
         mscs.reset(new MethodSafeCastSet());
       }