Smashes the properties on the provided arguments into the first argument.
Any properties on the tail arguments will overwrite
any existing properties on the first argument.

@param {any} a The target to be smashed.
@param {...any} rest The tail items to smash onto the target.
@returns {any} A reference to the smashed target.
function smash(a, ...rest) {
    rest.forEach(b => {
        if (this.isSmashable(a, b)) // find a way to move isSmashable internal
            this._smash(a, b);
    });
    return a;
}