Optimize Gaussian blur

Move from quadratic to linear time exploiting the fact that two
successive 1-D convolutions give the same result as one 2-D convolution