shadow: use minimal of computed size or max allowable shadow size
quartz: add gaussian filter

quartz backend uses vImage for gaussian filter.  Apple's vImage does
convolution filters.  However, convolving function on large size image
is quite slow.  The approach for gaussian filter in quartz backend is
to shrink the original image, reduce kernel size and apply convolution
on reduced-size image, and then scale back to original size.

This approach is faster than applying convultion on original image.
However, there are two caveats:  (1) scaling image is not as fast as
I hope to be, (2) the blurred image quality is low when the blurs are
large.  This is due to unable to set exact interpolation quality in
quartz.  Setting interpolation quality in quartz is only a hint.
quartz: add support for shadow