implement custom-set for haskell

I didn't go all the way to re-implement Set efficiently, but I did use a binary tree rather than a list :)
/cc @soapie @qnikst @pminten @sjakobi
Why do you write `(s + size l' - size l)` instead of `s + 1` or `succ s`? Do I miss something?