Implemented intersection, intersectionWith and intersectionWithKey

Leaf and switch functions really need that many arguments:
* minimum key for each node are handled explicitly to ensure *O(n+m)* performance
* current implementation is twice as fast as pairs-based implementation (commit 61257ca92b52e1f2c0d9759c201f2f637ec8cd27) 

Difference and faster union will follow