fix(angular.forEach): correctly iterate over objects with length prop

Should handle JQLite, jQuery, NodeList and other objects like arrays
but not other generic objects or instances of user defined types
with length property.

Closes #1840
refactor(angular.copy): use slice(0) to clone arrays

slice(0) is way faster on most browsers
refactor(angular.copy): use array.length=0 to empty arrays
chore(docs): improve docs parser type

previously we barfed on function type definition with optional arguments
like {function(number=)}

this fixes it

I also added a bunch of code that helps to debug incorrectly parsed docs.
revert: refactor(angular.copy): use slice(0) to clone arrays

This reverts commit 28273b7f1ef52e46d5bc23c41bc7a1492cf23014o.

slice(0) doesn't perform deep copy of the array so its unsuitable
for our purposes.
test(angular.copy): add tests for scenarios when target is missing
chore(matchers): fix hasBeenCalledOnceWith matcher

the error message was wrong and misleading
feat($resource): expose promise based api via $then and $resolved

Expose $then and $resolved properties on resource action return values which
allow checking if a promise has been resolved already as well as registering
listeners at any time of the resource object life-cycle.

This commit replaces unreleased commit f3bff27460afb3be208a05959d5b84233d34b7eb
which exposed unintuitive $q api instead and didn't expose important stuff
like http headers.
docs($resource): fix missing punctuation
chore(Rakefile): parallelize the build on Travis

now that the forking issue is solved we can run regular build there

https://github.com/travis-ci/travis-ci/issues/845
docs(guide): Fix typos in concepts/model,view.
fix(numberFilter): fix formatting when "0" passed as fractionSize

When checking to add decimal and trialing 0s number filter used to check
trueness of fractionSize. "0" evaluating to true causes "123" to return "123."
feat(filter): Add comparison function to filter

Add optional comparator function argument to $filter('filter')(array,
expression, comparator) such that the comparator function is used to
compare the values and predicates.  When true, defaults to equality.
When missing defaults to substring matching.
chore(reakefile): auto install npm packages
fix(compiler): Allow startingTag method to handle text / comment nodes
fix(resource): Update RegExp to allow urlParams with out leading slash

Will allow reoucese to be loaded from a relative path
Example:
var R = $resource(':path');
R.get({ path : 'data.json' });

Example usage:
Load resources in applications not using webserver, ie local webapp in 
on a tablet.
feat(noConflict): restore previous angular namespace reference
fix($rootScope): minor typo fixes
docs($parse): document function argument types, fix minor typo
feat($parse): added `constant` and `literal` properties

* `literal` is set to true if the expression's top-level is a JavaScript
  literal (number, string, boolean, null/undefined, array, object), even
  if it contains non-literals inside.

* `constant` is set to true if the expression is known to be made
  entirely of constant values, i.e., evaluating it will always yield the
  same result.

A consequence is that a JSON expression is guaranteed to be both literal
and constant.