kroneckerProduct(other) {
                other = this.constructor.checkMatrix(other);

                var m = this.rows;
                var n = this.columns;
                var p = other.rows;
                var q = other.columns;

                var result = new this.constructor[Symbol.species](m * p, n * q);
                for (var i = 0; i < m; i++) {
                    for (var j = 0; j < n; j++) {
                        for (var k = 0; k < p; k++) {
                            for (var l = 0; l < q; l++) {
                                result[p * i + k][q * j + l] = this.get(i, j) * other.get(k, l);
                            }
                        }
                    }
                }
                return result;
            }
Returns the Kronecker product (also known as tensor product) between this and other
See https://en.wikipedia.org/wiki/Kronecker_product
@param {Matrix} other
@return {Matrix}