xcb: add shadow support
shadow: change API from cairo_shadow_set_sigma() to cairo_shadow_set_blur()

cairo_shadow_set_sigma() is not a good API, it is confusion and tied to
gaussian blur parameter.  cairo_shadow_set_blur () is clear in semantics
gl: pass alpha value to shader

In gaussian filter, if the source is opaque, we should pickup
sampler color of (0, 0, 0, 1) instead of (0, 0, 0, 0).  However, since
gaussian blur is done on a RGBA texture, we don't know whether the original
source is opaque or not.  Instead, we pass the alpha value in uniform.
xcb: set correct extends on filtered picture
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
shadow: move shadow cache interfaces to cairo-surface-backend

Moving shadow cache interfaces to backend allows to implement shadow
cache for each surface type that does not have cairo_device
quartz: add shadow cache
shadow: initialize shadow cache size properly