fix bug in map: my technique only works with typejoin, not promote_type

this gives us a useful type bound for every computed element. using
promote_type, the computed elements can be almost anything, and need
to be converted using a dynamic dispatch to convert().
use memmove in Array grow and delete

this allows them to work on undefined references

allow pointer(a, i) to work on all arrays