fix(ingIf/ngShow/ngHide): follow javscript `truthy`/`falsy` logic

Make ngIf, ngShow and ngHide follow javascript `truthy`/`falsy`
logic and not the custom toBoolean logic

Fixes #5414 #4277 #3969

BREAKING CHANGE: The expressions

* `<div ng-hide="[]">X</div>`
* `<div ng-hide="'f'">X</div>`
* `<div ng-hide="'[]'">X</div>`

used to be evaluated to `false` and the elements were hidden.

The same effect is present for `ng-show` and the elements are now
  visible; and with `ng-if` and the elements are now removed

If you were previously doing `ng-show="exp"` where
  `$scope.exp = 'no' // (or 'n' or 'f')`, then instead write
  `ng-show="exp && exp !== 'no'` (or 'n' or 'f').