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
I guess you wanted to indent by 2 spaces here instead of 1.
You may also want to align the `=`s on line 80 and 81.