non-local-means: add new implementation based on convoluting Gaussian kernels

* The current implementation is based on the loop-swapped one. Computing patches
  and their distances has been removed. Instead, the distance between the image
  and the displaced one is computed by convolving the squared distance function
  and the Gaussian kernel (more details in the code, and also in the referred
  papers).

* There has been a huge improvement in performance. However, I wouldn't dare to
  say that all this improvement is due to the convolution technique. Not having
  to build the individual patches can be also a major factor.