Separate QuerySet::Recorder and QuerySet::Runner.

With the old paradigm, I found it too difficult to communicate the idea
that the runner returns the recorder's return values.  This commit
separates the recorder from the runner and moves return value generation
closer to the point of #run (or .queue), which I find easier to read.

This new mechanism is also much easier to test.