chore: reorganize test helper files under test/helpers
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
style(animateSpec): remove ws
test(docs): disable brittle tests that need to be rewritten
feat(mocks): make $timeout#flush throw an exception when empty

When calling $timeout.flush with or without a delay an exception should
be thrown if there is nothing to be flushed.

This prevents tests from flushing stuff unnecessarily.

BREAKING CHANGE: calling $timeout.flush(delay) when there is no task to be flushed
within the delay throws an exception now.

Please adjust the delay or remove the flush call from your tests as the exception
is a signed of a programming error.
fix(mocks): $timeout#flush should not update time when empty

When $timeout#flush is called with a delay and no task can be flushed within that
delay, the current time should not be updated as that gets the mock into an inconsistent
state.

BREAKING CHANGE: if a tests was written around the buggy behavior the delays might be off now

This would typically not be a problem, but because of the previous breaking change in
$timeout.flush, the combination of two might be confusing and that's why we are documenting
it.

Old behavior:

```
doSomething(); //schedules task to execute in 500ms from now
doOtherStuff(); //schedules task to execute in 600ms from now

try {
  $timeout.flush(300); // throws "no task to be flushed" exception
} catch(e) {};
$time.flush(200); //flushes only doSomething() task
```

New behavior:

```
doSomething(); //schedules task to execute in 500ms from now
doOtherStuff(); //schedules task to execute in 600ms from now

try {
  $timeout.flush(300); // throws "no task to be flushed" exception
} catch(e) {};
$time.flush(200); // throws "no task to be flushed" exception again
                  // because previous exception didn't move the time forward
```

Fixed test:

```
doSomething(); //schedules task to execute in 500ms from now
doOtherStuff(); //schedules task to execute in 600ms from now

try {
  $timeout.flush(300); // throws "no task to be flushed" exception
} catch(e) {};
$time.flush(500); // flushes only doSomething() task
```
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
fix(i18n): remove obsolete locale files

Remove obsolete locale files that are not found in Google Closure library.

I don't know why they were removed, but without a link to Closure we can't
maintain these files going forward so I'm deleting them.

BREAKING CHANGE: some non-common region-specific local files were removed.
chore(i18n): update path in the generate.sh script
style($http): remove unused argument
revert: fix(mocks): $timeout#flush should not update time when empty

This reverts commit 42af8eada2803a54a98b4f792e60feb480d68a0c.

This turned out to be a bad idea as it prevents us from moving the
time forward and asserting that the component state didn't change
due to the scheduled task executing too early.
revert: feat(mocks): make $timeout#flush throw an exception when empty

This reverts commit cbf06a5d64aba537f0e2679a194d3998d8365493.

This turned out to be a bad idea because it allow us to fast-forward
the wall clock time (see previous commit).
test(Scope): fix tests after reverting commits

Making assertions on state (rather than interactions) is better anyway.
docs(guide): update description of $inject mechanism to be a little clearer
fix(ngAnimate): cut down on extra $timeout calls
chore($rootScope): provide support to execute a function after the digest cycle is complete