Added ref type parameter, `compact` to PooledDataFrame

* Allows the user to specify the reference type for PooledDataArrays
  (default is still Uint16)
* Added `compact` to take an existing PooledDataArray and change the
  reference type to the smallest size possible.  Returns the same
  PooledDataArray if nothing has changed, and a new one if the size
  is reduced
* Added RefType to distinguish refs arrays from normal arrays during PooledDataArray construction