Hack around HList variance
Clean up the macro code and add a specialized HArray2
Add HArrayII for storing an unboxed HArray[Int ||: Int] as a long.

We have to be careful to always create the right specialized version so
we can cast to it at runtime as needed (for going from a polymorphic
boxed version to an unboxed call path).