fix(Angular.js): fix isArrayLike for extends

Add spec for isArrayLike
Change element detection to use Node.`hasChildren`
Add Arguments detection
Prepares a single boolean return instead of several if return boolean
statements

1. Convert if-return boolean statements to single boolean return.

2. Assign boolean conditionals to break up the long boolean return
and avoid repeated calls.

3. Declare variables at the beginning of function to avoid hoisting errors.
Break long lines into indented and aligned expressions.

4. Add hasOwnProperty(obj, propertyName) to proxy
Object.prototype.hasOwnProperty for objects in IE<9 that do not have the method.

https://github.com/angular/angular.js/issues/4751