Defined arrayV smart constructor.

Which knows to make an ArrayV or BitsV as appropriate.
Also some other minor code reorganization.
Added a static type-checking pass.

It breaks some test cases. I'll fix those shortly.
Fix bugs in type inference.

Now we can handle all the current test cases again.
Cleanup code a bit given we now have a static pass.
Determine the types for holes and BitChoose in static phase.
Remove unnecessary type tracking in Generate phase.
mkFreeArg doesn't need to evaluate the type.

It should already be evaluated.
Don't introduce explicit cast for variable update.

Because it's wrong, and we no longer need it.