Fix get_courses to handle inflight changes

more rigorously.

@cpennington if you don't have time to review, please punt to someone capable
@mattdrayer @ziafazal this should fix your problem. please review and confirm. (I did red-yellow-green TDD)

I toyed with that. The existing behavior was an immediate delete w/ a lingering index entry in the bulk ops records. To delay the deletion would entail adding a but more instrumentation (a state flag or to_be_deleted list) to the bulk ops records. I thought deletion was so infrequent (and not well enough understood) that it didn't matter as long as it was consistent (i.e., I didn't worry about atomicity) If you think it's important to add atomicity, we can. As it was, it was just broken. (get_courses returned the deleted course in the test).