Arrays and more

Dmitry -- I went through and made a few changes. In particular, I implemented support for arrays in some parts, and I updated various algorithms to be more complete and to match my understanding. I renamed some of them to the older names (`ConvertAndCopyTo`, `Reify`), though I am not wedded to those names in particular.

One change I made was to convert dimensions from a list of integers to a cons list. I just think the description works out somewhat nicer that way, since very often you want to ask "Is there an array dimension? If so, what are the remaining dimensions.", and a cons list is perfectly suited to such a question.

I didn't have the real ES6 spec in front of me so I am sure that my style doesn't match up. I just thought it was worthwhile to sketch out the algorithms first and we can hammer out the precise formal description later.