Speed up hcat and friends, clean up Index creation

Created unexported hcat! function to reduce allocation, notably
in hcat, join, and similar functions.
Speed / clean up _setdiff and its call sites
Clear up DataFrame / AbstractDataFrame signatures

Fleshes out a current (transient) interface for AbstractDataFrames,
loosens signatures of methods that work for AbstractDataFrames,
tightens signatures of methods that don't.

Shuffles code around accordingly -- it is not meant to be permanent,
but apart from less broken methods, it is much clearer what implicit
interfaces exist, and, for me at least, what changes would need to
happen to add different types of data frames. Longer term, perhaps
DataFrame and some of its methods belong to an abstract subtype of
AbstractDataFrame.
Modernize .gitignore
Fix nas function for PooledDataArrays and for non-numeric eltypes
Speed up vcat, combine, and aggregate
Remove some aggregate methods, broken colwise method

The aggregate methods have not made it into a tagged release and clutter
the API for covering a small subset of column renaming cases.
The matching colwise method is also being removed without a deprecation
warning because it never worked.
Speed up AbstractDataFrame => Matrix/DataMatrix conversion

There's still room to speed up underlying copy! routines
Speed up aggregate, remove based_on now that combine is fast
Restore Julia 0.4 compatibility
Merge pull request #729 from JuliaStats/unexported

Speedups, bugfixes, and fleshing out current AbstractDataFrame API