Building a 3D FFT based poisson solver.

It appears to be working in the notebook, I need to run some more tests to make sure.
Added a class that wraps 3D FFT solver.

We want to cache the matrix of k^2 values. It is large and relatively expensive to compute
Moved build_k2 to cython