Reduce unnecessary Mongo polling.

Specifically, updates and removes that specify a specific _id, and all inserts,
should not require live queries that specify a specific different _id to poll.

This involves changing the InvalidationCrossbar matching semantics. I suspect
that a future version of the InvalidationCrossbar may want the old semantics, if
the notifications it is receiving are more oplog-driven than command-driven, but
this will work for now.

The implementation passes the test suite, but it would be nice to:

 - add unit tests for the crossbar
 - add mongo_livedata_tests tests testing that things still poll
 - do a manual test to show that unnecessary polls don't happen
 - benchmark a typical app which does single-ID writes and observes
Add unit tests for crossbar matching algorithm
Oops, make the ID invalidation optimization actually work.

Because we normalize "id" queries to {_id: "id"}, make sure we process those
correctly.

This adds a helper function to minimongo that's only used by mongo-livedata, but
I suspect it will be useful there too.  (In fact! All of the calls to
_selectorIsId in minimongo are essentially unused, because
Meteor.Collection.update/remove normalizes first...)
Make the O(1) optimization on minimongo remove("id") actually work.

Previously it was declawed by the fact that Meteor.Collection.remove normalizes
to {_id: "id"}.
Test id-based invalidation.

This requires adding a test-only parameter to observeChanges that lets us turn
off time-based polling.
Make id-based invalidation work with validated updates and removes too.