Refactored to create a separate DataFrameRow class

Also:
* DRYed out sub() functions
* Deprecated subset (alias for sub), on the theory that we should
  remove redundant methods like this
* SubDataFrame can still be parameterized with Vector{Int}, Ranges{Int}
* Changed type to immutable for SubDataFrame, various other related types