add destructive and non-destructive qsort

sort uses ins_sort if len < 10 (MAX_INS_SORT)
but clones it before.
if longer qsort a clone, via potion_sort_internal.
support 4 cmp types: empty(NIL): sort by UNIQ (random, but stable)
TRUE (ascending numeric value - only for numbers)
FALSE (descending -"-)
block (closure): cmp method on 2 args returning -1,0,1
fix sort (off-by-one), use xor swap

omit tmp, use xor swap-inplace instead