Нормализовать методы Array и возвращаемые значения

Есть ли библиотека JavaScript Array, которая нормализует возвращаемые значения и мутации Array? Я думаю, что JavaScript Array API очень непоследователен.

Некоторые методы изменяют массив:

var A = [0,1,2];
A.splice(0,1); // reduces A and returns a new array containing the deleted elements

Некоторые нет:

A.slice(0,1); // leaves A untouched and returns a new array

Некоторые возвращают ссылку на мутированный массив:

A = A.reverse().reverse(); // reverses and then reverses back

Некоторые просто возвращают undefined:

B = A.forEach(function(){});

Я хотел бы всегда мутировать массив и всегда возвращать один и тот же массив, чтобы я мог иметь некоторую согласованность, а также иметь возможность цепочки. Например:

A.slice(0,1).reverse().forEach(function(){}).concat(['a','b']);

Я попробовал несколько простых фрагментов, таких как:

var superArray = function() {
    this.length = 0;
}

superArray.prototype = {
    constructor: superArray,

    // custom mass-push method
    add: function(arr) {
        return this.push.apply(this, arr);
    }
}

// native mutations
'join pop push reverse shift sort splice unshift map forEach'.split(' ').forEach(function(name) {
    superArray.prototype[name] = (function(name) {
        return function() {
            Array.prototype[name].apply(this, arguments);
            // always return this for chaining
            return this;
        };
    }(name));
});

// try it
var a = new superArray();
a.push(3).push(4).reverse();

Это прекрасно работает для большинства методов мутации, но есть проблемы. Например, мне нужно написать собственные прототипы для каждого метода, который не изменяет исходный массив.

Поэтому, как всегда, когда я делал это, я думал, что, возможно, это было сделано раньше? Существуют ли легковесные библиотеки массивов, которые уже делают это? Было бы неплохо, если бы библиотека также добавила прокладки для новых методов JavaScript 1.6 для старых браузеров.