Added tests for many-to-many with order by

There's a bug where the order by doesn't get preserved entirely
Correctly synchronize ForeignKEy fields

instead of having a findIndexes method, which wasn't always being
called, synchronize the two fields it was setting in the getters
moved test to pick-joins-and-indexes

this doesn't set the max joins to 0
Added some more tests re: sort & indexes
For joins keep sort if non-left-most is sorted

During planning we note whether the index scan covers the sorting
but we don't really know if you have:
(o JOIN (index JOIN o))
vs
((index JOIN o) JOIN o)

This commit adds a check at install time. Hopefully we won't get
here because that would mean our cost estimates were off, but at
least we'll return the correct results now
Pass around whether sorting is ok

Sorting is only allowed for left most source. Joins will have to
create and maintain a bestPlan for if they're nested or if they're
not
First pass at remembering unsorted plans

some rules tests broke, so something's clearly wrong here
Removed unused variable & moved comment
Comments explaining part of the hash join is which
duplicate joins between sortAllowed & not

The method alters the join operators to remove conditions
so we need to clone the join operators for each one
Updated OperatorCompilerTest to be parameterized
Updated costs for loader plans

There's some interesting things here, but I'm deferring this to the
task of fixing our cost system
Removed `true &&`
Updated RulesTest README
Added another test
Added some stats for the m2m tables
Extend tracking of isolation levels through to the transaction service, where something interesting might happen.
Centralize selection of transaction scan options for operator.
Hook those together so that SET TRANSACTION ISOLATION LEVEL selects appropriate scan options for operators.
Allow getting scan options without a transaction for tests that create cursors and only then begin before opening them.