src/util.js
function _smash(a, b) {
    this.forEach(b, (val, key) => {
        if (this.isSmashable(a[key], b[key])) // find a way to move isSmashable internal
            this._smash(a[key], b[key]);
        else
            a[key] = this.deepCopy(b[key]);
    });
    return a;
}
function _smash(a, b) {
    this.forEach(b, (val, key) => {
        if (this.isSmashable(a[key], b[key])) // find a way to move isSmashable internal
            this._smash(a[key], b[key]);
        else
            a[key] = this.deepCopy(b[key]);
    });
    return a;
}
Internal smash call.
Performance abstraction to bypass all the argument shenanigans,
as we know we will only be smashing two items at a time internally.

@param {any} a The item on which to smash the second.
@param {any} b The item to smash onto the first.
@returns {any} The reference to the first item.