Updates to univariate kde - all kernels and weights

This is an 'almost finished' PR which updates the fft binning univariate kde. I have changed the routine based on the algorithm given in

```Wand, M. P. and Jones, M. C. (1995). Kernel Smoothing.```

It now works for any kernel type, and for weighted samples. I have also written some unit tests for this.

In the case of the Gaussian kernel, the code no longer uses the 'exact' fft of the kernel, but the results are very close, and the code still passes all the unit tests. 

A few other small changes:
- Now the kernels in ```/sandbox/nonpaprametric/kernels.py``` return ```0``` instead of ```nan``` when out of sample.
- Some documentation has been cleaned up.

I did this because I was thinking about implementing the 2D version, and thought I may as well have a go at cleaning this up first.