I think the ideal behavior would be that it expected errors with try/catch and then just passed the results object to the callback without modification (unless it's undefined, in which case pass nothing), instead of trying to get both through the return value. I think that would make it compatible with most synchronous functions - otherwise you have to write your synchronous functions in a specific way to make them work with `async.lift`.

I'm not sure if that'll be hard if we use it in ways that assume that the error comes through the return value, though.