Speedups, bugfixes, and fleshing out current AbstractDataFrame API

@tshort The third commit is the one of interest, where I shuffled around code between DataFrame and AbstractDataFrame, and fleshed out a transient interface
I'd forgotten that's what `eachcol` did, so that shoots down my argument. We should keep them separate. I still prefer a generic iterator for `columns` for an AbstractDataFrame along with a specific method definition for a DataFrame.