derp: Convert to trees.

And have an explicit compaction step.
compiler: Handle pattern-matching on empty lists.
runtime/base: Raise a different kind of exception when non-iterable.

For the generated code that handles pattern matches. This prevents failed
pattern matches from aborting the program.

Maybe we should have a PatternFailed exception?