fix(ngRepeat): correctly iterate over array-like objects

Check if the object is array-like to iterate over it like it's done with arrays.

Closes #2546
fix(ngView): accidentally compiling leaving content

closes: #2304
feat(injector): add has method for querying

Closes #2556
fix(ngAnamite): eval ng-animate expression on each animation
fix($location): prevent navigation if already on the URL
fix($location): compare against actual instead of current URL
feat(ngInclude): $includeContentRequested event

Adding a $includeContentRequested event in order to better keep track of
how many includes are sent and be able to compare it with how many have
finished.
docs(injector): add docs for $injector.has
fix($location): prevent navigation when event isDefaultPrevented
doc(input): fix small typo in code example
fix(dateFilter): correctly format ISODates on Android<=2.1

In older Android browsers, `undefined` does not act like `0` in some
arithmetic operations. This leads to dates being formatted with `NaN`
strings in the dateFilter because the implementation of the `dateGetter`
function allows offset to be an optional parameter.
The fix is to convert offset to 0 if it is undefined.

Closes #2277, #2275
fix(select): ensure empty option is not lost in IE9

Fix a check inside render for select elements with ngOptions, which
compares the selected property of an element with it's desired state.
Ensure the placeholder, if available, is explicitly selected if the model
value can not be found in the option list.
Without these fixes it's up to the browser implementation to decide which
option to choose. In most browsers, this has the effect of displaying the
first item in the list. In IE9 however, this causes the select to display
nothing.

Closes #2150, #1826
fix(date): correctly format dates with more than 3 sub-second digits

This date {{2003-09-10T13:02:03.123456Z | date: yyyy-mm-dd ss} is now
treated as having 123.45ms. Previously it had 123456ms so 123 seconds
were added to the formatted date.
Use local date in unit tests so they work in any time zone
feat($cookieStore): $cookieStore.get now parses blank string as blank string

closes #1918
fix(angular): do not copy $$hashKey in copy/extend functions.

Copying the $$hashKey as part of copy/extend operations makes little
sense since hashkey is used primarily as an object id, especially in
the context of the ngRepeat directive. This change maintains the
existing $$hashKey of an object that is being copied into (likewise for
extend).
It is not uncommon to take an item in a collection, copy it,
and then append it to the collection. By copying the $$hashKey, this
leads to duplicate object errors with the current ngRepeat.

Closes #1875
style($compile): clarify argument name
test(sortedHtml): fix comment support in sortedHtml helper
test(sortedHtml): ignore bogus rowspan=1 and colspan=1 in IE
chore(docs): use done() in gen-docs.js
refactor($resource): simplify url template expansion