Assemble sort keys into an array, and pick them out, each with correct orderType

Fixes many cases, including the example given in #107.

Many other queries currently trip up the planner, including when filtering is present; see the pending tests included in this PR.
You're correct. This will obviously only handle cases that are matched by `HasSortFields`, which requires the keys to be simple BsonFields and the order types to be string constants. As it turns out, the compiler only produces Sort nodes in that form (at least for the cases that work).

Looking at the pipeline that actually appears here, I don't think it's of any use, given that it's building an array of objects that we never actually want MongoDB to construct. What *might* be useful is the pipeline attached to each individual key and (possibly) order-type. That might be worth looking into.

I think that raises an interesting question, though. If our ambition is to make the planner as general as we can, then shouldn't we be writing tests where we construct LogicalPlans that can't be emitted by our query compiler? That would open up a lot of possibilities.