Fixed various issues and implemented some new features around the new ScanningQueryEngine

This PR contains different commits related to different query-related issues, as follows:
* MODE-2178 - fixed the code for various types of JOINS and also shareable nodes. Enabled back all the previously disabled Tck tests
* MODE-2247 - implemented the `INTERSECT` and `EXCEPT` operations together with several new test cases
* MODE-2209 - implemented the ability to check `READ` permissions for nodes returned from a query, via a new `NodeSequence` implementation
Actually, I just re-read the spec, and in Section 14.16 it says "If a query matches two or more nodes in a shared set, whether all of these nodes or just one is returned in the query result is an implementation issue." Up to and including 3.x, we only returned one of the nodes in the shared set because it was the easiest to do with that implementation. IMO, that behavior is the hardest for clients to deal with, because they're going to get back one of the nodes in the shared set (and which one they don't really know). Perhaps it's time to change this in 4.0, and return all nodes in the shared set.