Denoising images using non-local means

In this PR I am adding a new general way to apply denoising in 3D and 4D images using NLMEANS. I have rewrote and optimized the algorithm. For the first time we use OpenMP in dipy through cython. OpenMP increases considerable execution time when you want to use multi-threading with shared memory. 

A few things that are missing and they should come soon in another PR. 

1) estimate SNR for each of the 3D volumes of a DWI dataset
2) estimate SNR for T1 and add an example of T1 denoising in the existing example.
3) explain that we first estimate the noise and then apply the mask
4) add any other references.
5) extend the method to its adaptive version which is what we used for the ISBI competition
6) make sure that the results correspond with Pierrick's matlab code.

@samuelstjean will work on these steps as I need to focus on a different project and denoising is his main interest.

GGT!