vcat container and eltype promotion, internal speedups

Supersedes and closes #733.
Less copying in general -- salient cases were `eachcol()` and the `DataFrameRow` iterator being O(ncol^2), copying the vector of colnames once per col, which amounted to a 4x slowdown by 20 cols, and I imagine blew up from there. I'd be up for making `names` non-copying, because the it's much rarer you want that and `copy(names(df))` works in those less common cases -- I'm just guessing that would get pushback.