chore(build): change logging level for e2e tests to info
docs(misc/faq): remove obsolte t-shirt instructions
chore: remove jstd leftovers
chore: update karma to 0.9.4

And also add shared config to make karma configs a bit simpler.
chore: clean up angularFiles.js
chore: set up Sauce Labs with Travis

This should not affect the Jenkins build at all.

Now, the Travis build uses Chrome on Sauce Labs, which in theory gives us opportunity to use any
browser/platform that Sauce Labs offers.
test(docs): fix invalid paths
chore(gitignore): add .agignore

I use a .agignore file to skip the build directory and some other files
while searching using Ag (see
https://github.com/ggreer/the_silver_searcher).
test($compile): use FQDN for img[src]

img[src]="https://foo" has the unfortunate problem that the browser will
actually try retrieving the resource the non FQDN foo.  The local DNS
might suffix a domain to this, resolve it, and try to present a
certificate for the https request and prompt the user to pick a
certificate. This commit avoids that by making foo a FQDN.  Note that it
might be better to replace foo with example.com (ref
http://tools.ietf.org/html/rfc2606#section-3).
docs(Angular.js): explain that toJson strips $... properties

In Angular.toJson, any properties with a leading '$' character will be
stripped from the resulting string since angular uses this notation
internally for services.  There have been complaints of not knowing
about this functionality until it breaks within their code.
docs($cacheFactory): show that you can access existing caches
chore: add karma-script-launcher plugin

This plugin is shipped as a default one with Karma. It's specified as a peer dependency.

I assume, there's an old version of NPM on the CI server, which does not support peerDependencies and therefore it didn't get installed.

This will make the dependency explicit.
fix(Angular.js): handle duplicate params in parseKeyValue/toKeyValue

parseKeyValue and toKeyValue can now handle duplicate values in the query.
```
?x=1&x=2 <-> {x:[1,2]}
```

The algorithm looks like:
    1)parseKeyValue looks for presence of obj[key]
    2)detects and replaces obj[key] with [obj[key],val]
    3)then pushes more duplicates if necessary
    4)toKeyValue decodes array correctly
    5)(not changed)$location.search({param: 'key'}) still replaces if necessary
    6)(not changed)$location.search({param: ['key1', 'key2']}) sets the url with duplicates

BREAKING CHANGE: Before this change:
- `parseKeyValue` only took the last key overwriting all the previous keys;
- `toKeyValue` joined the keys together in a comma delimited string.
This was deemed buggy behavior. If your server relied on this behavior
then either the server should be fixed or a simple serialization of
the array should be done on the client before passing it to $location.
test(ngRepeat): fix IE8 test compatibility issue
feat(minErr): Error stripping build step
fix(jqLite): rename jqLiteError to jqLiteMinErr
docs(guide/location): fix example code - `hashPrefix` is a method
fix($injector): refactor module loading code and use minErr
revert: test(ngRepeat): fix IE8 test compatibility issue

This reverts commit 0c6fb665a4e2e1e7ceb11372153963658d4b53b1.

The change invalidated the test because the point of the the test
was to test that an element directive works. Changing it to attribute
directive was wrong.
test(ngRepeat): disable an element directive test on IE8