fix(isArrayLike): correctly handle string primitives

Fix for #3713:

> The `isArrayLike` test in 1.0 worked properly with any string values, returning `true` (since they can be indexed just like `String` objects and work with functions like `Array.prototype.forEach`). The new test in 1.2 (introduced by #3356) raises a `TypeError`, because the `in` operator cannot be used on a non-object.

Since there are no tests for the private `isArrayLike`, I'm including a test for `angular.forEach`, its main caller.