feat($compile): support multi-element directive

By appending  directive-start and directive-end to a
directive it is now possible to have the directive
act on a group of elements.

It is now possible to iterate over multiple elements like so:

<table>
  <tr ng-repeat-start="item in list">I get repeated</tr>
  <tr ng-repeat-end>I also get repeated</tr>
</table>
Merge branch 'master' of https://github.com/angular/angular.js
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.
feat(input): Allow custom events and timeouts to trigger model updates

By default, any change on the content will trigger an immediate model update
and form validation. You can override this behavior using the
`ng-update-model-on` attribute to bind only to a comma-delimited list of events.

I.e. `ng-update-model-on="blur"` will update and validate only after the control
loses focus.

If you want to keep the default behavior and just add new events that may
trigger the model update and validation, add `default` as one of the specified
events.

I.e. `ng-update-model-on="default,mousedown"`

Also, a `ng-update-model-timeout` attribute will allow defering the actual model
update some time after the last trigger event takes place. This feature is not
available in radio buttons.

You can specify both attributes in any tag so they became the default settings
for any child control, although they can be overriden.

Closes #1285