feat($timeout): Add debouncing support to $timeout service

This feature allows resetting the timer on an ongoing `$timeout` promise.

A fourth optional argument is added to `$timeout` which is the
old promise to be reset.

I.e.: `promise = $timeout(fn, 2000, true, promise);`

This will call `fn()` 2 seconds after the last call to the `$timeout()`
function.
fix(ngScenario): Restrict radio/checkbox check switch in IE<9

Only flip the element `checked` value when triggering `click` events
in IE8 and lower.
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
feat(ngdocs): add variable type hinting with colors
chore(ngIf): Add animation code to ngIf example and docs text to ngAnimate docs
feat($sniffer): Add support for supportsAnimations flag for detecting CSS Animations browser support
feat(ngAnimate): Add support for CSS3 Animations with working delays and multiple durations
chore(ngAnimate): CSS classes X-setup/X-start -> X/X-active

BREAKING CHANGE: css classes foo-setup/foo-start become foo/foo-active

The CSS transition classes have changed suffixes. To migrate rename
.foo-setup {...} to .foo {...}
.foo-start {...} to .foo-active {...}

or for type: enter, leave, move, show, hide

.foo-type-setup {...} to .foo-type {...}
.foo-type-start {...} to .foo-type-active {...}