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 entire input when limit value can't 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.

Closes #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.