Fix #809: Add some tests for Arrays backed by TypedArrays
Replace Function nodes by Closure nodes with explicit captures.

The Closure nodes have much nicer semantics when it comes to
reason about the program, let alone optimizing and inlining it.
They have explicit, immutable, evaluate-when-creating-the-closure
captures.

To preserve binary compatibility, the deserializer
reverse-engineers the patterns of Function nodes that are
created by the compiler in various situations, and recreates
Closure nodes from there.

In the IR as such (as typechecked and desugared), Function nodes
are not allowed anymore.
Merge pull request #813 from gzm0/typed-arrays-test

Fix #809: Add some tests for Arrays backed by TypedArrays
Emit Closure nodes in the compiler instead of Functions.

Follow up on the parent commit, now the compiler emits the
new Closure nodes instead of Functions.
Follow up on #802: fix the behavior of the IR checker for While.

Although the constructor of the While(BooleanLiteral(true), body)
always typechecked itself as NothingType, the IR checker still
required that the body typechecked as NothingType. This commit
fixes this inconsistency.
Merge pull request #816 from sjrd/fix-ir-checker-for-infinite-while

Follow up on #802: fix the behavior of the IR checker for While.
Fix #812: Protect deserialization IR hacks with IR version.
Merge pull request #814 from sjrd/closure-nodes

Replace Function nodes by Closure nodes with explicit captures.