Single-value channel results

Further to #2, this uses a single channel value, either a success or failure, instead of a vector of [success failure].  The "failure" predicate is `(instance? Throwable)`.

The only real opportunity for creativity was in how `dosql` ought to work.  I thought it would be awkward to shoehorn the previous implementation into working with the single-result approach.  I'm obviously more than happy to make whatever changes.