feat($parse): Getter/Setter functions as assignable expressions

Allow a getter/setter function to be treated as an assignable expression
by calling the function with `$value` in its argument list. It is
assumed that functions called this way will follow the convention used
by angular in its providers, where calling the function with no
arguments acts as a getter, and calling it with arguments acts as a
setter.

In addition to `$parse`, the modules most affected by this change are
`ngModel`, and `$compile` (when adding a bi-directional binding to the
scope by using `'='`). Add tests and documentation to those modules, in
addition to `$parse`, with a full usage example in
`ngModel.NgModelController`.

The overall goal is to better allow support for "computed" properties,
and allow easier delegation between modules, without consuming code
having to change or break encapsulation to bind to these values.