Generator for a list of 2-partitions of N qubits

such that all pairs of qubits are split in at least one partition, This follows a variation on ArXiv:1908.0562 - instead of explicitly partitioning the list based on the binary indices of the qubits, we repeatedly divide the list in two and then zip it back together.

qubit_list(list): list of qubits to be partitioned num_iterations(int or None): number of iterations to perform. If None, will be set to ceil(log2(len(qubit_list)))

partition(iterator of tuples of lists): the required partitioning