Return df.Columns as virtual boxed vector (fix #91), (related #100)

The df.Columns property now does not copy and box all data, but instead returns a
special type of vector that boxes values on the fly. When Frame.ofColumns is used,
it checks for this special type of boxed vectors and unboxes it to get the original
data.

This makes some things better (we can get df.Columns and perform some manipulation
on the returned series), but it does not help when you perform some manipulation on
the nested series (ObjectSeries), because that will still re-create the vector as
ArrayVector<obj>.