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
What were these changed from `DataFrame` to `AbstractDataFrame`? To me, it looks like `append!` relies on ability to `append!` each column.