fix($compile): pass transcludeFn down to nested transclude directives

If you have two directives that both expect to receive transcluded content
the outer directive works but the inner directive never receives a
transclusion function. This only failed if the first transclude directive
was not the first directive found in compilation.

Handles the regression identified in e994259739821094e77a3d2c1f30c28713b7ab3a

Fixes #7240
Closes #7387
refactor($compile): change parameter name

The boundTransclusionFn that is passed in is really the one from the
parent node.  The change to parentBoundTranscludeFn clarifies this compared
to the childBoundTranscludeFn.
fix($compile): fix nested isolated transclude directives

Closes #1809
Closes #7499
refactor($compile): no need to use bind
fix($compile): don't pass transclude to template of non-transclude directive

If a directive provides a template but is not explicitly requesting transclusion
then the compiler should not pass a transclusion function to the directives
within the template.
fix($compile): don't pass transcludes to non-transclude templateUrl directives
fix($compile): bound transclusion to correct scope

Nested isolated transclude directives.

This improves/fixes the fix in d414b787173643362c0c513a1929d8e715ca340e.

See the changed ng-ifunit test: The template inside ng-if should be bound to the
isolate scope of `iso` directive (resp. its child scope). Not to a child of
the root scope. This shows the issue with ng-if. It’s however problem with
other directives too.

Instead of remembering the scope, we pass around the bound parent transclusion.

Conflicts:
	test/ng/directive/ngIfSpec.js
fix($compile): ensure transclude works at root of templateUrl

If a "replace" directive has an async template, which contains a transclusion
directive at its root node, then outer transclusions were failing to be
passed to this directive.  An example would be uses of `ngIf` inside and
outside the template.

Collaborated with @caitp

Closes #7183
Closes #7772
test($compile): make IE8 happy

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

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

Closes #7830
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.
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): 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