SI-7159 Remove unreachable cases in GenICode#adapt

This commit removes some unreachable code in GenICode#adapt. It's
hard to prove that these cases are unreachable, but they do appear to be
and I  wasn't able to find a way to get to them. Code archaeology
was un-fruitful; they're very old. Which may mean they are legacies
from a time when Null and Nothing types weren't fully baked.
SI-7159 Prepare to remove erroneous INT <:< LONG in TypeKinds

In preparation for dealing with a problem in TypeKinds, this commit
does some cleanup of code related to doing coercions.

* Comments are added to clarify.
* A println when converting between BOOL and anything else is removed
and  the code is allowed to flow through to an assertion.
* Assertions are refactored to use string interpolation.
* A few pattern matches were reformulated to equivalent variants

In addition, a test is created for SI-107, the bug that necessitated
the special case in GenICode#adapt for LONG coercion
SI-7159 Remove erroneous INT <:< LONG in TypeKinds

TypeKinds said INT <:< LONG. But that's not true on the JVM, you need
a coercion to move up. And GenICode#adapt was checking for just that
special case.

This commit removes the INT <:< LONG rule and then removes the special
case from GenICode#adapt.
SI-7159 Distinguish between assignability and sub typing in TypeKinds

TypeKinds said SHORT <:< INT. But that's not quite true on the JVM. You
can assign SHORT to INT, but you can't assign an ARRAY[SHORT] to
ARRAY[INT]. Since JVM arrays are covariant it's clear that assignability
and subtyping are distinct on the JVM.

This commit adds an isAssignable method and moves the rules about
the int sized primitives there. ICodeCheckers, ICodeReader, and
GenICode are all updated to use isAssignable instead of <:<.
Merge pull request #2177 from JamesIry/master_SI-7159

SI-7159 Distinguish between assignability and subtyping in TypeKinds