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
Fix reftype conversion in compact
PooledDataArray updates:

* Added push!, pop!, shift!, unshift!
* For ref types of bit size 8 or 16, add overflow check
PooledDataArrays: added empty constructor, some docs