RFC: 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 things like `map(join, ["z", "я"])`. Equally, functions that can return `Int`s and `Float`s will promote to `Float` rather than trying to cast everything to `Int` (and producing `InexactError`s).

Performance in cases that already work should be largely unaffected; in almost all other cases, the promotion will only happen once. #210 still needs fixing for ideal performance, but at least this way `map` is functional in both senses.

(The worst case performance hit – for a small function over an `Int` array – is about 2x.)

In order to make this work I had to extend `copy!` to support undefined values, as well as making it more flexible so that it gets called instead of the generic `copy!(dest::AbstractArray, src)`.

By the way, why are there map definitions for 1, 2, and multiple args? Wouldn't the N arg version suffice?