docs(CONTRIBUTING.md): fix link to unit testing docs

The old link points to a page that doesn't exist

Closes #7830
perf(Scope): change Scope#id to be a simple number

In apps that create lots of scopes (apps with large tables) the uid generation
shows up in the profiler and adds a few milliseconds. Using simple counter
doesn't have this overhead.

I think the initial fear of overflowing and thus using string alphanum sequence
is unjustified because even if an app was to create lots of scopes non-stop,
you could create about 28.6 million scopes per seconds for 10 years before
you would reach a number that can't be accurately represented in JS

BREAKING CHANGE: Scope#$id is now of time number rather than string. Since the
id is primarily being used for debugging purposes this change should not affect
anyone.
perf(forEach): cache array length

Micro-optimization :-)

BREAKING CHANGE: forEach will iterate only over the initial number of items in
the array. So if items are added to the array during the iteration, these won't
be iterated over during the initial forEach call.

This change also makes our forEach behave more like Array#forEach.
perf(shallowCopy): use Object.keys to improve performance

This change is not IE8 friendly
perf(jqLite): don't use reflection to access expandoId

Since we allow only one copy of Angular to be loaded at a time it doesn't
make much sense randomly generate the expando property name and then be
forced to use slow reflective calles to retrieve the IDs.
fix(jqLite): data should store data only on Element and Document nodes

This is what jQuery does by default: https://github.com/jquery/jquery/blob/c18c6229c84cd2f0c9fe9f6fc3749e2c93608cc7/src/data/accepts.js#L16

We don't need to set data on text/comment nodes internally and if we don't
allow setting data on these nodes, we don't need to worry about cleaning
it up.

BREAKING CHANGE: previously it was possible to set jqLite data on Text/Comment
nodes, but now that is allowed only on Element and Document nodes just like in
jQuery. We don't expect that app code actually depends on this accidental feature.
perf(jqLite): optimize element dealocation

Iterate only over elements and not nodes since we don't attach data or handlers
to text/comment nodes.
perf(jqLite): optimize adding nodes to a jqLite collection

This code is very hot and in most cases we are wrapping just a single Node so
we should optimize for that scenario.
perf: optimize internal isWindow call

Each window has a reference to itself, which is pretty unique so we can use
that to simplify our isWindow check
chore: name the event callback used by ngClick and friends

This maskes looking at stack traces easier.

Since we generate the callbacks for each event type at runtime and we can't
set function's name because it's read-only, we have to use a generic name.
perf(jqLite): improve performance of jqLite#text

This change is not compatible with IE8.
test(jqLite): add a missing test for jqLite#text
perf(jqLite): cache collection length for all methods that work on a single element

This affects jqLite#html, #text, #attr, #prop, #css and others.
perf(ngBind): set the ng-binding class during compilation instead of linking
perf($compile): move ng-binding class stamping for interpolation into compile phase
test(isWindow): add tests for isWindow
fix(ngResource): don't convert literal values into Resource objects when isArray is true

Previously non-object literals would be thrown out of Resource responses with isArray===true, or
otherwise converted into Objects (in the case of string literals). The reason for this is because
shallowClearAndCopy iterates over keys, and copies keys into the destination. Iterating over String
keys results in integer keys, with a single-character value.

Not converting non-objects to Resources means that you lose the ability to perform Resource operations
on them. However, they become usable as strings, numbers, or booleans, which is important.

In the future, it would be useful to make these useful as Resources while still retaining their primitive
value usefulness.

Closes #6314
Closes #7741
docs(CHANGELOG.md): add changes for 1.2.18 and 1.3.0-beta.12
fix(jqLite): change expando property to a more unique name

This was causing issue when element === window
A better strategy can be thought of later on.
refact(select): use `prop` to modify the `select` property

jQuery suggests using `prop` rather than `attr` to modify the `select` property of an element.
You can see the full list of migration warnings for jQuery:
https://github.com/jquery/jquery-migrate/blob/master/warnings.md

Closes #4107
Closes #4122