Some small changes along the way to mongo joins.

Wanted to push some things before I ended up with merge conflicts.

The only non-trivial change is “Request collection names.”
For most of these comments, the new code should behave the same as the old. I think there might be some use to a `Target` collection, and we could take advantage of that here no problem. And, while we request a `Tmp` collection, it may be ignored. EG, the `Read` case ignores the requested collection and `dst` is the `User` collection that was read.

However, I think you’re right that in a multi-stage workflow (EG, joins, where we pipeline then map/reduce) we could end up with a partially completed collection and perhaps we need to think through the consequences there.

The motivation for this change is implementing tasks like `JoinTask`, where we want to provide the same destination collection to multiple sub-tasks, which wasn’t possible with the previous version.

We could, of course, keep the request aspect of this change while still doing the maybe-rename afterward.