Pass spurious test failures

It appears that there are spurious test failures from sauce. The result in
sauce says pass with a note that says failed to upload some resources.
Sometimes the error may be different. However the test result has an error
in it and it is recorded as undefined which means failed in grunt and
 therefore travis.

This adds the onTestComplete: function callback which checks if the result
is undefined.

It also adds some sauce config to not do s3 video uploads on pass, which
should reduce errors and time taken to run tests. We can also add:

    "record-video": false,
    "record-screenshots": false

But we really want that info when tests fail so we can see which failed
and why.