A small comment from my side.
I have updated a module of mine which relied on PooledDataArrays.
It was quite easy to change to PooledArray.
However, some of my code ran into an error, because the behaviour of the levels function has changed.
In the absence of missing entries it is now equal to unique(your data) (missings.jl row 389), whereas before it was referring to the pool of the PooledDataArray.
For my purposes I have thus defined this:
function Missings.levels(x::PooledArray)
return deepcopy(x.pool)
end