Refactor index selection at query time

Apologies for the complexit of this commit. I wasn't very kind to future
me. I'll try and break it up later.

The basic idea here is that we need to switch from indivdual cursor's
picking their best index to having a more general selection scheme. This
is because a text index can answer most (all?) view based index queries.
Thus if a text index exists it can answer queries even for selectors
that don't specify a $text operator or have an otherwise un-indexable
operator.

This still prefers to use view based indexes for a couple reasons.
First, we know how they work and scale a bit better. Secondly it should
prevent users from having suddenly drastically different query
performance. And third, just cause.