chore: run more browsers on Travis (IE8,IE9,IE10,Safari,FF)

Also instead of running everything in parallel, there are only two parallel tasks:
- e2e tests running in the background (only on Chrome)
- all the unit tests running sequentially
chore: use only polling on Travis/SL
chore(travis): clean up logs

Forward SauceConnect logs and Karma debug logs into a file and print these files at the very end of a build.
fix($q): reject should catch & forward exceptions thrown in errback
chore(tests): add Promises/A+ Test Suite to the build

Closes #3693
fix(mocks): make expectedDelay in $timeout.flushNext an optional arg

Closes #3628
fix(mocks): $timeout.flushNext should throw an exception

we can't use Jasmine's `expect` here since this code should be library agnostic
fix(mocks): $timeout.flushNext should throw if nothing to flush
feat(Scope): async auto-flush $evalAsync queue when outside of $digest

This change causes a new $digest to be scheduled in the next tick if
a task was was sent to the $evalAsync queue from outside of a $digest
or an $apply.

While this mode of operation is not common for most of the user code,
this change means that $q promises that utilze $evalAsync queue to
guarantee asynchronicity of promise apis will now also resolve outside
of a $digest, which turned out to be a big pain point for some developers.

The implementation ensures that we don't do more work than needed and
that we coalese as much work as possible into a single $digest.

The use of $browser instead of setTimeout ensures that we can mock out
and control the scheduling of "auto-flush", which should in theory
allow all of the existing code and tests to work without negative
side-effects.

Closes #3539
Closes #2438