Allow PCA of complex data rather than only keeping the real part

I want to be able to do PCA of NMR spectra, which are complex.
I've rolled my own code, borrowing heavily from scikit-learn - see https://github.com/chatcannon/nmrpca
However, it doesn't look like it will be too hard to add support for complex numbers upstream - here's my attempt.

N.B. Trying to run the scikit-learn test suite gave all sorts of spurious errors (lots of "cannot import name inplace_column_scale" among others); I think there is something wrong with my setup. Therefore this code is untested.