fix(core): drop the toBoolean function

So far Angular have used the toBoolean function to decide if the parsed value
is truthy. The function made more values falsy than regular JavaScript would,
e.g. strings 'f' and 'no' were both treated as falsy. This creates suble bugs
when backend sends a non-empty string with one of these values and something
suddenly hides in the application

BREAKING CHANGE: values 'f', '0', 'false', 'no', 'n', '[]' are no longer
treated as falsy. Only JavaScript falsy values are now treated as falsy by the
expression parser; there are six of them: false, null, undefined, NaN, 0 and "".

Fixes #3969
Fixes #4277

cc @IgorMinar @petebacondarwin
OK, so I guess I'll wait for #7970 and then remove this wrapping? This does cause the watcher to fire when changing from a truthy value to another truthy value; is there any performance difference between evaluating:
```js
$scope.$watch('foo', handler);
```
and
```js
$scope.$watch('!!foo', handler);
```
?

"Adding" an existing class should be a noop, so the cost is mainly due to invoking the watch handler; if changing a simple field to an expression adds new functions to the pipeline, there should be no perf difference.