feat(ngModel): bind to getters/setters

**WIP: do not merge**

The implementation in this PR changes the semantics of `ngModel` in the following ways:

If the expression bound to `ngModel` resolves to a function, the function is invoked to get the current value to be expressed in the DOM. When the binding changes, if the expression bound to `ngModel` resolves to a function (at that time) the function is invoked with the new value.

I like that to end developers, this feels like "uniform access" for common cases. I don't like that this means there's a difference in semantics between `ngModel` and expressions elsewhere in Angular.

This would be a breaking change, but I don't think that this would affect any legitimate use cases. The only case I can think of is if hypothetically, you bind to some property that's originally a function, overwriting it with a string. I can't think of any good reason to write controller code like that.

@IgorMinar suggested a different syntax so that the difference in semantics is obvious. Something like:

```html
<input ng-model="foo.bar()">
```

I like that this makes the semantics obvious. I don't like that this still violates the "uniform access principle."

Closes #768
I was going to ask what we're doing with `getter` here, because `getter(ctrl.$modelValue)` doesn't use the result for anything.

But I realized that this is because this is named `getter`, and it should really be renamed to reflect how it's being used here --- `setter` or `getterSetter` maybe