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
chore(grunt-utils): fix java classpath on Windows
chore(travis): speed up the build

- parallelize the tasks
- cache requests (e2e tests)

This reduces the time from ~18min to ~12min.

It makes the output little messy. We could buffer output of each task and display it once it's fully finished, nicely. I think giving instant feedback is better.
chore(grunt-utils): remove unnecessary quotes from minerr_url

The quotes were causing the minerr processing to fail on Windows
revert: fix(compiler): corrects component transclusion on ...

This reverts commit 15e1a29cd08993b599f390e83a249ec17f753972.

The original commit was fixing two issues - one of them was
preventing attributes that triggered directives that replaced
the compiled node to be merged into the new node.

This change was a breaking change (as seen in the diff of the
tests in this commit) and that's why it's being removed.

A proper fix will follow.
fix($compile): prevent infinite loop w/ replace+transclude directives

Previously if a template contained a directive that had a template
(sync or async) and the directive template was to replace the original
element and the directive template contained another directive on the
root element of this template and this new directive was an element
transclude directive then an infinite recursion would follow because
the compiler kept on re-adding and reapplying the original directive
to the replaced node.

This change fixes that.

Closes #2155
fix(bower): Use latest ng-closure-runner
docs(tutorial/step9): formatted Unicode character line

Add tick and cross mark corresponding to their respective unicodes.
fix(ngCloak): hide element even when CSS 'display' is set

Previously an element like
<div class="foo ng-cloak">...</div>
would still be annoyingly visible if it matched a CSS rule like
.foo { display: inline-block; }, overriding ng-cloak's display: none.
fix(jqLite): prepend array in correct order

Match jQuery behavior when prepending array into empty element