Fully working implemenation

... at least for 1 k point (haven't tested multiple yet. One issue was
with not dividing the resulting inverse Fourier transformed functions
in _scf() by the real space grid dimensions. I really should add a
method to handle all of this for me (i.e. allocation, memcpy, FFT, and
dividing by this). I also changed things a bit so that this hopefully
has better cache performance.