chore($parse): convert parser() and lex() to prototype-based code

This reduces memory consumption of parsed angular expressions and
speeds up parsing.

This JSPerf case demonstrates the performance boost:
http://jsperf.com/closure-vs-prototype-ngparser

Chrome: 1.5–2x boost
FF: slightly slower (I would love to know why)
IE: 4x boost

To be clear, this doesn't have any impact on runtime performance
of expressions as demostrated in this JSPerf:
http://jsperf.com/angular-parser-changes

Closes #3681
fix(ngResource): Remove request body from $delete

Prevent the  obj.$delete instance method from sending the resource as the request body.  This commit uses the existing hasBody boolean to only set httpConfig.data for methods which should have a request body.

Closes #4280
docs($resource): remove extra "to" from $resource docs

Closes #4287
docs(tutorial/step_07): fix module name

Closes #4283
docs(filter): add missing semi-colon

Closes #4273
docs(ngList): improve grammar and clarity
docs(a): change model.$save() into something less deceptive

Closes #4215
fix(rootScope): make stopPropagation only stop its own event

All sibling event handlers residing on the same scope to were stopped
if one of them called stopPropagation.

Closes #4204
docs(tutorial/step02): fix missing brace

Closes #4301
docs(ngValue): add docs for ngValue directive

Closes #4267
refactor($parse): only instantiate lex/parse once

Closes #4286
docs(ngModel): fix grammar and improve clarity

Closes #4291
style(angularSpec): add missing semicolon
style(injectorSpec): add semicolons & test helpers
style(select): fix semicolons and vars
fix(*): protect calls to hasOwnProperty in public API

Objects received from outside AngularJS may have had their `hasOwnProperty`
method overridden with something else. In cases where we can do this without
incurring a performance penalty we call directly on Object.prototype.hasOwnProperty
to ensure that we use the correct method.

Also, we have some internal hash objects, where the keys for the map are provided
from outside AngularJS. In such cases we either prevent `hasOwnProperty` from
being used as a key or provide some other way of preventing our objects from
having their `hasOwnProperty` overridden.

BREAKING CHANGE: Inputs with name equal to "hasOwnProperty" are not allowed inside
form or ngForm directives.

Before, inputs whose name was "hasOwnProperty" were quietly ignored and not added
to the scope.  Now a badname exception is thrown.

Using "hasOwnProperty" for an input name would be very unusual and bad practice.
Either do not include such an input in a `form` or `ngForm` directive or change
the name of the input.

Closes #3331
revert: refactor($parse): only instantiate lex/parse once

This reverts commit 281feba4caffd14ffbd6dedfb95ad6415cff8483.

Since Lexer and Parser objects are stateful it is not safe
to reuse them for parsing of multiple expressions.

After recent refactoring into prototypical style, the instantiation
of these objects is so cheap that it's not a huge win to use
singletons here.
refactor(location): $location now uses urlUtils, not RegEx

The location service, and other portions of the application,
were relying on a complicated regular expression to get parts of a URL.
But there is already a private urlUtils provider,
which relies on HTMLAnchorElement to provide this information,
and is suitable for most cases.

In order to make urlUtils more accessible in the absence of DI,
its methods were converted to standalone functions available globally.

The urlUtils.resolve method was renamed urlResolve,
and was refactored to only take 1 argument, url,
and not the 2nd "parse" boolean.
The method now always returns a parsed url.
All places in code which previously wanted a string instead of a parsed
url can now get the value from the href property of the returned object.

Tests were also added to ensure IPv6 addresses were handled correctly.
fix(): Added protocol override to signature