Current implementation is very much suboptimal:
First, it relies on concat(), which is a "generic method" (ECMA-262 ç15.4.4.4), meaning it creates a new array on each invocation. This ends up creating a new intermediary array for every non-duplicate value. This makes it memory-intensive. We can migrate to push() and use a single array all along.
Second, it relies on include(), which is O(n)-complex, as it does not require the original array to be sorted. This can be justified, but if the array *is* sorted, it is way suboptimal: we could just check against last(), except for the first item, which is necessarily not a duplicate. So we could introduce a "sortedAlready" parameter, which defaults to false, to let this happen.
The attached patch, with tests, does all this. I'd always been reluctant to use uniq() because of its amazing potential memory cost and overkill complexity. Now I'm good :-)