make sure data is hermitian before Qobj is created
code restructuring: factor out preconditioning in a separate function for clarity and so that it can be reused for different iterative solvers
pep8 compliance