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
Yeah with this algorithm it can make sense to try to iterate over the smaller side, but with an efficient hedge algorithm the efficiency can depend more on the sets themselves than their size. If we're talking about optimizations the right place to start is to balance the tree, but since the example is really only used for reference I'm not sure that's a worthy endeavor right now.