Emitter: Fix an oops in for loop prep size calculation.
Nasty bug fix: gc collection for hashes was really broke.

I ran up against this bug by accident when trying to add some enum class
related stuff. It took a long time to pin down what was causing it, but the
actual issue is pretty simple:

The gc collect version of hash teardown did not tear down keys, and didn't
free anything if the hash value wasn't refcounted (say, an integer). However,
the normal deref hash teardown does it right. This wasn't an issue until the
garbage collector triggered with the right setup at the right time.
Enum classes (and any) can now directly compare to subtypes.

Consider this:
    any someval = 10

It is now possible to do this:
    someval == 10
    or
    10 == someval

The same is also now possible with enum classes. An Option class that SomeType
and NoneType members can be compared directly with a SomeType or NoneType
instance.

On the downside, a temporary hack has been put in place to keep the vm from
crashing when garbage collecting enum class instances. This will be fixed in
time (the real solution is to properly look at classes and signatures to
determine if they can be circular).

A couple tests have been added to test/pass/sanity.ly as well.