Correctly memoise io module

Thanks to Charlie Paucard for the report.
Add prefix? method on blocks to lift to patterns

Any single-parameter block returning a boolean can be lifted to a
pattern that succeeds exactly when the block returns true using the ?
operator.
Mark interned iomodule as GC root earlier

Patch from Charlie Paucard. Previously, the iomodule object was marked
as a root after the allocation of file streams it held, but those
allocations could trigger garbage collection. This commit moves the
rooting earlier.
Report an error when first token indented

If the first content line of a module is indented, when the indentation
drops the compiler will crash trying to find out where the indentation
should be. This change correctly raises the error at the initial invalid
indentation.
Ensure frame element names are escaped correctly

When a top-level var or def had a non-ASCII name the slot name was saved
incorrectly, as slot names were escaped using the internal _escape
method rather than proper string escaping. Hexadecimal escape characters
were mangled and would not work where required, and raised errors in
some compilers.
Fix bug in prelude_clone with low GC periods

Patch by Charlie Paucard.