gfx: Implement most of `box-shadow` per CSS-BACKGROUNDS.

All features of the `box-shadow` property are supported, including
spread and multiple shadows, with the exception of `inset`. However,
spread currently looks ugly when combined with blur. This is the result
of a present limitation in the Azure API that will necessitate
modifications to Azure. Because that will involve modifying all Azure
backends, I have left that work to a followup.

r? @SimonSapin