Do not modify array prototype unnecesarily

If possible do not augment the built in prototypes, but if we are going to do
it at least do it checking if it is already implemented so that we do not
remove crush current implementations and also if it's possible we should do it
with the ES5 Object.defineProperty and setting the property as `enumerable:
false`

For the moment I just changed the function to operate standalone