Bug 1070429 - [email/IMAP] premature saving leads to missing bodies

Agreed, I think we just want to switch to promises or appropriate constructs from https://github.com/kriskowal/gtor and bail on all use of callbacks.  In that case, all we want is Promise.all and allback.latchedWithRejections for cases where we don't want the aggregate Promise to reject when it gets its first rejection.  (Ideally kkowal has something we can use instead of our home-brew latchedWithRejections, but I didn't see any when I looked and wrote that.)

I think all functions that take a callback argument (rather than returning a promise) obey the node error style callback.  It's just latch where there's an odd coercion that is getting hacked around with bind().

If you want to try a different approach as a commit on top of this, I've pushed my fixes based on your review thus far so you can layer.