Currently we only optimize Array.concat when the 'this' and argument object have the same boxed/unboxed representation. It would be better if we could optimize concat'ing different kinds of arrays; this affects performance a lot on kraken-stanford-crypto-pbkdf2, where double and int32 unboxed arrays are frequently concatenated. The attached patch fixes this, and also fixes a couple other performance issues. The unboxed array analysis is not forced the first time we try to attach a baseline cache for concat and other array natives (on pbkdf2 we would do this too early and end up using an unboxed int32 representation for a group that should really use an unboxed double representation) and the basic concat() native is augmented to use a similar optimized path to the specialized array_concat_dense and avoid some of the perf cost of calling this native.