refactor(limitTo): simplify filter implementation

Simplify implementation by delegating to Array.prototype.slice and
String.prototype.slice. Previous implementation used more complicated
logic when slice() has the same behavior. It also handled strings and arrays
separately, even though they should be treated the same.
feat(limitTo): return the entire input when the limit value cannot be parsed

Make the limitTo filter return the unfiltered input if the limit value
cannot be parsed as an int. Previous behavior was to use a default limit
of 0. This provides a simple way for a consumer to specify that the output
should not be limited by passing a value like null. Previously a consumer would have to explicitly pass
the length of the array or string. This behavior is also more intuitive,
as a limit of null or undefined will no longer limit the output.

See https://github.com/angular/angular.js/issues/3560

BREAKING CHANGE: any non-integer limit value will now cause limitTo to
return the entire input instead of returning an empty collection. To
migrate code that needs a zero-length result, explicitly pass a limit
value of 0.