Add array references to the language

I added the StoreT transformer to Monae to permit mutable arrays. `ArrayV` now
contains an `ArrayPtr` which is currently just an `Integer`. The `ArrayPtr` is
an address in the new `Heap` data structure which maps `ArrayPtr`s to Haskell
`Data.Array`s. These underlying arrays are only exposed through the `SubscriptE`
and `SubscriptUpdateE` expressions. In all other cases the `ArrayPtr` is passed
around.

Additionally, this fix revealed an error in the implementation of array
sub-scripting. The `bounds` function returns an inclusive range rather than one
exclusive of the upper end-point.