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
This method was documented as "Create a sequence of nodes that contains the nodes from the first sequence followed by the second sequence." A sequence cannot change its width, so I think the original logic and IAE was correct. 

Where is this method now being used to deal with joins? Joins always combine rows from two sources, and never just return the rows of one source followed by the rows of a second source. Perhaps we need a different method to handle the join case (e.g., change the width by prepending or appending nulls)?