Overhall referencing; allow x[2] = y to initialise an array

This is mainly in preparation for adding maps.  However, some of the
array / reference stuff was wrong.  In particular, copy constructors
can't dereference because that means operator [] can't return
references.  Now you can do x[2] = y, meaning that with a bit more
code you can say x["blue"] = y