WIP: Promote result array in map

I've added promotion to `map` -- if the next `f(x)` doesn't fit into the result array, the array type is promoted. This will fix examples like `map(join, ["z", "я"])` without affecting performance too much in cases that already work.

There's only one problem: `similar` sometimes creates arrays with undefined values, which breaks `copy` (and therefore `convert`). What's the best way to handle this?

c.f. #210