docs(tutorial): clean up and elaborate introduction
chore(docs/app/tutorials): improve helper directives
docs(tutorial): synchronize with angular-phonecat changes
docs(tutorial/step-8): module must be loaded in test

Closes #6930
feat(ngModelOptions): custom triggers and debounce of ngModel updates

By default, any change to an input will trigger an immediate model update,
form validation and run a $digest. This is not always desirable, especially
when you have a large number of bindings to update.

This PR implements a new directive `ngModelOptions`, which allow you to
override this default behavior in several ways. It is implemented as an
attribute, to which you pass an Angular expression, which evaluates to an
**options** object.

All inputs, using ngModel, will search for this directive in their ancestors
and use it if found.  This makes it easy to provide options for a whole
form or even the whole page, as well as specifying exceptions for
individual inputs.

* You can specify what events trigger an update to the model by providing
  an `updateOn` property on the **options** object. This property takes a
  string containing a space separated list of events.

  For example, `ng-model-options="{ updateOn: 'blur' }"` will update the
  model only after the input loses focus.

  There is a special pseudo-event, called "default", which maps to the
  default event used by the input box normally. This is useful if you
  want to keep the default behavior and just add new events.

* You can specify a debounce delay, how long to wait after the last triggering
  event before updating the model, by providing a `debounce` property on
  the **options** object.

  This property can be a simple number, the
  debounce delay for all events. For example,
  `ng-model-options="{ debounce: 500 }" will ensure the model is updated
  only when there has been a period 500ms since the last triggering event.

  The property can also be an object, where the keys map to events and
  the values are a corresponding debounce delay for that event.
  This can be useful to force immediate updates on some specific
  circumstances (like blur events). For example,
  `ng-model-options="{ updateOn: 'default blur', debounce: { default: 500, blur: 0} }"`

This commit also brings to an end one of the longest running Pull Requests
in the history of AngularJS (#2129)!  A testament to the patience of @lrlopez.

Closes #1285, #2129, #6945
fix($animate): ensure class-based animations always perform a domOperation if skipped

Closes #6957
docs(guide/tutorial): make added assertion one which will actually work.

Update the by.binding usage to make the test case work.

Closes #6987
docs(tutorial): change regexp so that assertion works

Need to remove this single space for the regex to work here.

Apparently `getText()` is trimming the text content or something, because there is no good reason
why that space should not be there.

Closes #6985
fix($compile): fix regression which affected old jQuery releases

ddb8081 and 4ea57e7 removed the calls which trimmed leading and trailing whitespace from templates
in the HTML compiler. This broke old versions of jQuery (such as 1.9.1), which do not trim
whitespace in their constructors. Naturally, this would not appear in the jQuery tests, as we are
testing against a version which does trim whitespace in the constructor.

This fix re-adds calls to `trim()` when compiling templates in $compile, in order to avoid breaking
old versions of jQuery.
docs(tutorial): fix links to bower in Step 11

Minor change: add missing bower reference link.

Closes #7005
docs(CONTRIBUTING.md): typo fix

"submitting and issue" should be "submitting an issue"

Closes #7002
docs(guide/directive): grammatical fixup

The 'to' in 'end-to-end' is directional, not numeric

Closes #6895
docs(tutorial): added a link to Wiki page on DI in Step 7

This article is fantastic and really helped on understanding how DI works on Angular. It may be
useful to other beginners -- because, at first glance, this topic (DI on Angular) ended a little bit
hazy for me.

Closes #7010
docs(ngModelOptions): fix param name and tidy up examples
docs(tutorial/step-7): clarify the new files & modules

Closes #6996
docs(tutorial/step-5): clarify inline annotations

Closes #6998
docs(guide/di): clarify what can be injected into what

Also do some general housekeeping and tidying of the page.

Closes #6999
chore(docs/app): remove redundant code directive

Closes #7000
docs(tutorial/step-8): link to Protractor rather than ngScenario

Angular test runner API has been deprecated, Protractor is advised:
http://docs.angularjs.org/guide/e2e-testing
Link is updated to direct reader to Protractor API.

Closes #7001
docs(tutorial/step-8): fix external link