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
Okay, but in a UNION the output columns must always be the same. I think in this case, the UNION will be returning width 1, so the node sequence of width 2 needs to be "reshaped" to only return the correct column. (We have to look at the select to know which column should be returned, but it's the same one that's being unioned.)

So if the UNION code handles that (perhaps by calling a "reshape" method in NodeSequence), then the above logic can still always check that the widths are the same.