Fix for ServiceWrapper's invokeAny when tasks don't complete successfully
Previously we would stop invokations as soon as one would error out.  Now we respect the original contract where we hold on to failures, and keep trying until we get one that works (or if none work then we throw the last failure we got).
This complicates the code a bit, but it is technically more correct.  I added unit tests to verify this behavior.