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 <:<.