fix($compile): bind ng-attr-* even if unbound attribute follows ng-attr-*

Previously, <element ng-attr-foo="{{binding}}" foo="bar"></element>'s "foo" attribute would always
equal "bar", because the bound version was overwritten. This CL corrects this behaviour and ensures
that the ordering of attributes does not have an effect on whether or not ng-attr-bound attributes
do their work.
fix(injector): allow multiple loading of function modules

Change HashMap to give $$hashKey also for functions so it will be possible to load multiple module
function instances. In order to prevent problem in angular's test suite,  added an option to HashMap
to maintain its own id counter and added cleanup of $$hashKey from all module functions after each
test.

Before this CL, functions were added to the HashMap via toString(), which could potentially return
the same value for different actual instances of a function. This corrects this behaviour by
ensuring that functions are mapped with hashKeys, and ensuring that hashKeys are removed from
functions and objects at the end of tests.

In addition to these changes, the injector uses its own set of UIDs in order to prevent confusingly
breaking tests which expect scopes or ng-repeated items to have specific hash keys.

Closes #7255
docs(ngPluralize): spell Mary's name correctly

Update ngPluralize.js

Just a silly change to the name of one of the examples that appears to be a typo. Changing Marry to
Mary as the first would be a verb and the latter would be an extremely common name.

Closes #7884
docs(tutorial/step-4): fix e2e test

After a protractor update the test syntax had to be changed.

Closes #7919
docs($provide): it is a service not an object

Closes #7917
fix(input): escape forward slash in email regexp

This messed up with syntax coloring and variable hovering in chrome developer tools and made debugging really difficult.

Closes #7938
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
test(isWindow): add tests for isWindow