perf($parse): don't use reflective calls in generated functions

Chrome and FF are smart enough to notice that the key is is a string literal, so this change doesn't
make a difference there. Safari gets a boost. I haven't tested IE, but it can't cause harm there. :)

http://jsperf.com/fn-dereferencing
feat($q): add streamlined ES6-style interface for using $q

This potentially helps lead the way towards a more performant fly-weight implementation, as discussed
earlier in the year. Using a constructor means we can put things in the prototype chain, and essentially
treat $q as a Promise class, and reuse methods as appropriate.

Short of that, I feel this style is slightly more convenient and streamlined, compared with the older
API.

Closes #8311
Closes #6427 (I know it's not really the solution asked for in #6427, sorry!)
fix(jqLite): triggerHandler support unbind self

Fixes .one if the event is invoked from triggerHandler.

Closes #5984
fix(docs): change plnkr form to open in same window

Form previously posted to target="_blank", but pop-up blockers were causing this to not work.
If a user chose to bypass pop-up blocker one time and click the link, they would arrive at
a new default plnkr, not a plnkr with the desired template.

This fix removes the _blank target, causing the plnkr to open in the current window/tab.
feat($compile): change directive's restrict setting to default to EA (element/attribute)

Previously we defaulted just to A because of IE8 which had a hard time with applying css styles to HTMLUnknownElements.

This is no longer the case with IE9, so we should make restrict default to EA. Doing so will make it easier to create
components and avoid matching errors when creating new directives

BREAKING CHANGE: directives now match elements by default unless specific restriction rules are set via `restrict` property.

This means that if a directive 'myFoo' previously didn't specify matching restrictrion, it will now match both the attribute
and element form.

Before:

 <div my-foo></div> <---- my-foo attribute matched the directive
 <my-foo></my-foo>  <---- no match

After:

 <div my-foo></div> <---- my-foo attribute matched the directive
 <my-foo></my-foo>  <---- my-foo element matched the directive

It is not expected that this will be a problem in practice because of widespread use of prefixes that make "<my-foo>" like
elements unlikely.

Closes #8321
docs(tutorial/step-3): note that the server needs to be running before running Protractor

Closes #7142
docs(tutorial/step-2): note that ng-app now needs a module name

Closes #7655
docs($rootScope): correct the $watch `listener` parameter description

Closes #8322
style(Angular.js): remove unused variables

Closes #8331
fix(angular.copy): clone regexp flags correctly

Closes #5781
Closes #8337
docs(changelog): release notes for 1.3.0-beta.17 and 1.2.21
docs(tutorial): update step7 ngdoc to fix grammar

This line was missing an 'as'

Previous:
We also have to add the modules dependencies of our app. By listing these two modules as dependencies of `phonecatApp`, ...

New:
We also have to add the modules *as* dependencies of our app.

Closes #8345
docs(tutorial): update step_03.ngdoc

1) The original document is not clear to a new developer in where to place the code.
2) The query.clear() statement to clear the query before the second test is missing in the original document.
3) Refactored to use the query and phoneList variables in both tests, so its easier to read and understand.

Closes #7815
chore(ci): pin sauce connect to v4.3
docs(Scope): clarify naming in the $watch example

Fixes #8254
Closes #8271
docs(ngChange) might not evaluate due to ngPattern

When a pattern is defined for an input field, ngChange is not evaluated
if the input doesn't match the pattern. Only changes to or from matching
patterns evaluate the ngChange expression.

See #7866
docs(ngChange): clarify when the ngChange expression is evaluated

Closes  #7866
docs(tutorial): explain how to modify the port or ip served by `npm start`

A developer working on a remote server will want to change the IP
address which npm start serves on. A developer working on a machine
which is already using port 8000 will want to change the port.

See https://github.com/angular/angular-phonecat/pull/191
fix($parse): correctly assign expressions who's path is undefined and that use brackets notation

Closes #8039
style(AngularPublic): add whitespace to jshint block

Closes #8360