* added == , != operators for QuGate
* added QuGate.init_from_mul
* reworked how QuGates get initialize to be more flexible
* added qudot.tensor_product which is a wrapper for numpy's kron